Ver la Versión Completa : [ SOLUCIONADO ] Perfil que entra en bucle y repite la tarea una y otra vez
emiegna
30/05/14, 21:28:56
Tengo un problema que no logro resolver con un perfil. He hecho varias pruebas. Cargando la aplicación Screen Off, con Secure Setting, con %DTOUT (ya que el lockscreen lo tengo con 15 segundos de espera de pantalla),... Pero nada. No doy con la tecla.
Por ejemplo, el siguiente perfil de WhatsApp trabaja correctamente. Al recibir un WhatsApp con la pantalla apagada (bloqueado), esta se enciende y enseguida aparece un popup que ocupa toda la pantalla. A los diez segundos la pantalla se apaga. Y si estoy fuera de la pantalla de bloqueo (inicio, navegando, etc) no hay popup, ni se apaga la pantalla.
Esto mismo quiero para DigiCal (calendario), pero no puedo poner como contexto un evento/notificacion, porque no trabaja. Debo hacerlo con un estado, entrada de calendario. Y claro, ya todo cambia...
Con DigiCal (calendario)... Como decía he hecho varias pruebas y nada.
Perfil: DigiCal alert.pop.blq (18)
Priority: 10
Estado: Entrada en calendario [ Título:%CALTITLE Ubicación:* Descripción:* Disponible:Cualquiera Calendario:* ]
Entrada: DigiCal Pop-Up (19)
A1: Pop-Up [ Título: Texto:Tienes un Recordatorio Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):10 Show Over Keyguard:Encendido ] Si (if) [ %SCREEN ~ off ]
A2: Esperar [ MS:5 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A3: Bloqueo sistema
Se apaga bien la pantalla estando en pantalla de bloqueo, pero también se apaga fuera de la pantalla de bloqueo. Solo quiero que la pantalla se apague en lockscreen.
Otra prueba...
Perfil: DigiCal alert.pop.blq (18)
Priority: 10
Estado: Entrada en calendario [ Título:%CALTITLE Ubicación:* Descripción:* Disponible:Cualquiera Calendario:* ]
Estado: Estado Pantalla [ Está:No ]
Entrada: DigiCal Pop-Up (19)
A1: Pop-Up [ Título: Texto:Tienes un Recordatorio Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):10 Show Over Keyguard:Encendido ] Si (if) [ %SCREEN ~ off ]
A2: Esperar [ MS:5 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A3: Bloqueo sistema
Se apaga bien en la pantalla de bloqueo a los diez segundos, pero se vuelve a encender con el popup continuamente. Vamos, que hace bucle. No para de hacer lo mismo.
¿Me podéis echar una mano, por favor? Es que además, luego quiero crear un perfil para la misma app que me alerte con un flash, pero solo fuera de la pantalla de bloqueo. Popup (y apagado posterior) en lockscreen sin flash, y flash fuera de lockscreen (sin apagado) y sin popup.
Quieres q solo se ejecute la tarea con un evento o estado del calendario y con pantalla apagada no? Pues en el primer perfil añade al contexto del calendario otro de pantalla. Listo.
Hace mucho q no lo pruebo pero creo q mostrar un pop up enciende automáticamente la pantalla corrígeme si me equivoco.
No hace falta poner espera se la pones en el tiempo que espera el pop up una respuesta del usuario.
Después para apagarla utiliza la acción de tasker para apagarla.
Se te apaga la pantalla pq le dices q bloquee y ahí no pones el if.
emiegna
31/05/14, 14:04:45
Gracias mlesir, pero creo que no me he explicado bien. Como verás en el segundo perfil que he puesto en el primer post de este hilo ya habia añadido al contexto "entrada de calendario" un segundo contexto; "estado de pantalla" (no), con idea de que el popup solo aparezca en el bloqueo. Y efectivamente así lo hace. Por cierto, tienes razon en lo de suprimir %SCREEN ~ off, pues no es necesario como dices.
Pero el problema que tengo con este perfil, que no tendria si el contexto para el calendario pudiese ser un "evento/notificacion" en lugar de una "estado/entrada de calendario", es que cuando me aparece el popup en la pantalla de bloqueo y finaliza el tiempo que he fijado, de nuevo aparece el popup. Y asi continuamente hasta que abro la aplicacion del calendario... cierre el popup o no. Es como si el contexto de "estado de pantalla" (no) trabaje bien con otro contexto que fuese un evento, pero no con otro contexto que sea un estado (siendo este ultimo mi caso actual---> 2 estados). O bien, problema del calendario que por cierto unicamente trabaja bien para el popup con estado "entrada de calendario".
Espero haberme explicado ahora mejor ;-)
Caravantes
31/05/14, 18:51:14
Perfil: DigiCal alert.pop.blq (18)
Priority: 10
Estado: Entrada en calendario [ Título:%CALTITLE Ubicación:* Descripción:* Disponible:Cualquiera Calendario:* ]
Estado: Estado Pantalla [ Está:No ]
Entrada: DigiCal Pop-Up (19)
A1: Pop-Up [ Título: Texto:Tienes un Recordatorio Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):10 Show Over Keyguard:Encendido ] Si (if) [ %SCREEN ~ off ]
A2: Esperar [ MS:5 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A3: Bloqueo sistema
La clave está en algo que tú mismo has comentado: lo del calendario es un contexto de estado, no de evento. El "estado" de ENTRADA EN CALENDARIO permanece durante un rato y el contexto también permanece "encendido" durante ese tiempo. El perfil se activa la primera vez porque tienes la pantalla apagada. La tarea enciende la pantalla, y eso hace que deje de cumplirse el segundo contexto. A su vez, eso provoca que el perfil deje de estar activo. Luego, a los pocos segundos, la pantalla se apaga. Entonces ocurre que ambos contextos vuelven a cumplirse y el perfil se activa de nuevo, ejecutando otra vez la tarea. Y así sucesivamente. El bucle se repetirá mientas el "estado" del calendario se siga cumpliendo.
Como digo, si el contexto del calendario fuese un evento... el perfil no volvería a reactivarse, pero siendo un estado ese contexto permanece activo durante un rato, no tengo ni idea de cuánto tiempo. Te sugiero hacer otro perfil solo para averiguar cuánto tiempo permanece activado el contexto de estado, supongo que será tanto tiempo como hayas marcado en el calendario.
Si no puedes usar un contexto de evento... creo que el problema tiene mal arreglo. En las propiedades del perfil puedes establecer un tiempo de enfriamiento, tiempo durante el cual el perfil no volverá a activarse. Eso será un apaño razonable si tus sucesos de calendario tienen todos la misma duración y es breve. Como sean duraciones distintas y algunas largas creo que no vas a poder resolverlo de esta forma.
Eres un maquina Caravantes. Lo has dejado clarísimo.
No he trabajado nada con el calendario pero quiza exista una variable en tasker q se pueda poner en descripcion, en el contexto, o incluso poner un tercer contexto de variable.
La idea seria q no se activara si la descripcion coincide con la ultima que disparo el perfil.
Caravantes
31/05/14, 23:56:32
Si no puedes usar un contexto de evento... creo que el problema tiene mal arreglo.
Bueno, creo que he encontrado una solución, al menos es una opción a considerar. Se trata de quitar el contexto de pantalla apagada, para que el perfil no se desactive y reactive en bucle. Al comienzo de la tarea se puede añadir una acción DETENER TAREA si pantalla está encendida. Y así conseguimos lo mismo, pero sin bucle.
Estado: Entrada en calendario [ Título:%CALTITLE Ubicación:* Descripción:* Disponible:Cualquiera Calendario:* ]
Entrada: DigiCal Pop-Up (19)
A1: Detener tarea, Si (if) [ %SCREEN ~ on ]
A2: Pop-Up [ Título: Texto:Tienes un Recordatorio Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):10 Show Over Keyguard:Encendido ]
A3: Esperar [ MS:5 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A4: Bloqueo sistema
emiegna
01/06/14, 01:33:00
...pero maquina, de verdad!! A medida que pasa el tiempo que empece con Tasker (yo creo que 15 dias, no mas) me voy dando mas cuenta de lo novatazo que soy. Si ya la primera solucion era magistral, la segunda ni digamos.
Con la primera ya trabajaba correctamente, eso si, tenia que cambiar la configuracion del tiempo de los eventos en DigiCal a por ejemplo 1 minuto (lo tenia en 60 minutos) y en las propiedades del perfil del popup poner un Cooldown de 2 minutos. De esta forma ya quedaba resuelto. Pero ahora venia un pequeñiiisimo problema... a cambiar todos los eventos de mi calendario a un tiempo de duracion de 1 minuto... de chinos, pero por lo menos tenia ya una solucion.
Pero con la segunda solucion... Ufff, magistral no, lo siguiente (peassso de novato que estoy hecho). Hala, no hay na que cambiar entonces en el calendario. Perfecto!! Eso si, quiero aprender porque tengo cada minuto que pasa nuevas ideas para hacer con Tasker. Y no quiero quedarme con la duda de esta segunda solucion... Hay algo que no entiendo, Detener tarea si la pantalla esta encendida (¿?). A ver, que funcionar, funciona. Y perfecto, pero porque? Yo con esta solucion entiendo una cosa, pero no es lo que pasa, jajajaa; si hay una entrada de calendario (contexto/estado) lo primero que deberia ocurrir es detener todo!!! Ni popup, ni espera, ni bloqueo del sistema, ni na. No? Pues no, no es asi. Porque?
El problema que yo veo es que va a estar continuamente realizando la tarea de entrada y deteniendo. No se como afectaría a la bateria.
Efectivamente existe una variable %CALDESCR. Descripcion del evento de calendario. Tambien hay titulo y otras.
emiegna
01/06/14, 12:12:25
Bueno, yo creo que podemos dar el tema por resuelto. Porque trabajar, trabaja perfectamente. Tan solo que si alguien opina sobre el posible exceso de consumo de batería, no estaría de mas. Muchas gracias.
Caravantes
01/06/14, 14:55:00
Y no quiero quedarme con la duda de esta segunda solucion... Hay algo que no entiendo, Detener tarea si la pantalla esta encendida (¿?)
Me alegro que funcione. A ver si soy capaz de explicar todas las dudas e implicaciones. Empezaré por conceptos elementales que seguramente ya sean conocidos.
Hay dos clases de perfiles:
- Perfiles de Evento. Son los que tienen UN contexto de evento (solo uno, más es imposible) y pueden tener añadido algún contexto de estado. Solo tienen tarea de entrada, no hay tarea de salida. El evento es instantáneo y puntual, y por tanto el perfil no permanece activo (ni siquiera una centésima de segundo), pero ejecuta una vez la tarea de entrada. La tarea se repite cuando vuelve a producirse OTRO evento similar (siempre que los posibles contextos de estado también se cumplan, claro).
- Perfiles de estado. Son los que NO tienen ningún contexto de evento, tienen uno o más contextos de estado. El perfil permanece activo mientras todos los contextos se cumplan. Al activarse el perfil se ejecuta una vez la tarea de entrada, y al desactivarse se ejecuta una vez la tarea de salida. Si luego vuelven a cumplirse los contextos entonces se repite el ciclo.
El perfil que tú habías diseñado entraba en bucle porque la propia tarea cambiaba uno de los contextos de estado (pantalla off) haciendo que ese contexto dejara de cumplirse y luego volvía a cambiarlo haciendo que volviera a cumplirse. Por ese motivo el perfil era desactivado y reactivado por la tarea, lo cual volvía a provocar la ejecución de la tarea, en bucle.
La forma de solucionarlo es quitar ese contexto que está siendo afectado por la tarea. Pero entonces ocurrirá que el perfil se activará cuando se cumpla el único contexto, el del calendario, y ejecutará la tarea independientemente de que la pantalla esté encendida o apagada. Habías dejado claro que ese perfil solo te interesaba cuando la pantalla estaba apagada... pero supuse que también te serviría si la tarea solo se ejecutaba cuando la pantalla estaba apagada. En lugar de usar un contexto de tipo %SCREEN ~ off he insertado en la tarea una primera acción de tipo "abortar esta tarea si no se cumple %SCREEN ~ off", que viene a tener un resultado similar en la práctica.
En realidad hay una diferencia: con el segundo contexto de tipo %SCREEN ~ off el perfil ni siquera llegaba a activarse cuando la pantalla estaba encendida. En cambio con mi propuesta el perfil se activa siempre (y permanecerá activo mientras se mantenga el estado del calendario), aunque esta diferencia es poco relevante porque las acciones "importantes" de la tarea tampoco se van a ejecutar cuando el perfil se active estando la pantalla encendida.
si hay una entrada de calendario (contexto/estado) lo primero que deberia ocurrir es detener todo!!!
Eso de DETENER TODO está condicionado a la pantalla encendida. Si la pantalla está encendida sí se detiene todo. Si la pantalla está apagada no se detiene nada.
A1: Detener tarea, Si (if) [ %SCREEN ~ on ]
Te puedes preocupar del consumo de batería si tienes varios cientos de apuntes diarios en el calendario. Si tienes menos de 50 apuntes diarios el consumo va a ser mínimo, en todos los casos y circunstancias: ni con la pantalla encendida ni con la pantalla apagada; ni con apuntes de calendario que duren poco rato ni con apuntes de calendario que duren horas. Todo eso es irrelevante. Lo importante es que Tasker solo ejecutará la tarea una vez por cada apunte de calendario. Si la pantalla está apagada las cuatro acciones se ejecutan una sola vez, con un gasto imperceptible. Si la pantalla está encendida solo se ejecutará la primera acción, con menos gasto todavía. En el peor de los casos, si un día tienes 50 apuntes de calendario eso significará unas 200 acciones de tasker, lo cual es bastante poco, y además son acciones que tampoco consumen mucho a nivel de Tasker. En realidad, lo que más consume es que la pantalla se encienda durante 5 segundos para mostrar el PopUp: 5 segundos por 50 veces totalizan cuatro minutos de pantalla, puedes imaginar bastante bien cuánto consume eso, y te digo que Tasker a nivel interno consume infinitamente menos, en este perfil concreto.
Mi perfil de previsión meteorológica (http://www.htcmania.com/showthread.php?p=11594637#post11594637) se ejecuta una sola vez al día pero eso implica unas 150 acciones sucesivas, y algunas de ellas son de mayor consumo (consulta de datos a través de Internet, consulta de ubicación por GPS, etc). Además tengo otros muchos perfiles (http://www.htcmania.com/showthread.php?p=9131408#post9131408) que se ejecutan varias veces al día, y tengo una tarea (http://www.htcmania.com/showthread.php?p=13264042) que a diario la mantengo activada durante veinte o treinta minutos. Estimo que mi Tasker ejecuta cada día más de 10.000 acciones. Y cuando miro en las estadísticas de batería, Tasker suele andar por el 4% de consumo, o sea que es responsable del 4% de la batería gastada. Tras un día de uso con ese perfil, mira tus estadísticas de consumo de batería y luego nos cuentas.
Espero haber resuelto las dudas pero podéis seguir preguntando. Te sugiero que cambies el título del hilo. En el título actual "Problema bucle con popup" el popup tiene muy poca relación con el problema concreto. Creo que sería más adecuado algo como "Perfil que entra en bucle y repite la tarea una y otra vez"; eso servirá de orientación a quien tenga un problema similar en el futuro y busque cómo resolverlo.
emiegna
01/06/14, 15:50:53
Que me gusta un razonamiento lógico bien explicado y bien comprensible... Perfecto. Me has dejado bien tranquilo. Gracias.
Perdon por la gilipollez del gasto de bateria. No me di cuenta de q solo se ejecuta la tarea una vez. Llevas toda la razón Caravantes.
vBulletin® v3.8.1, Copyright ©2000-2025, Jelsoft Enterprises Ltd.