Ver la Versión Completa : [ CONSULTA ] Despertador que nos permite establecer la hora en tarea aparte
malkair
27/06/13, 18:53:44
Buenas, no sé si queda claro el título. Lo explico.
Tengo mi perfil de despertador, el cual se dispara a las 7:40. Lo que yo quiero es poder elegir, mediante una tarea independiente, la hora a la que quiero que se dispare. Algo así como establecer la hora de la alarma, de forma que esa hora pase a una variable y el perfil la reconozca, disparándose a dicha hora.
Es decir, creo una tarea independiente que me pide entrar texto (esto no lo he hecho nunca, supongo que se hará a través de las escenas), fijo hora y minutos; esta hora y minutos (previamente pasada al formato HH.MM que usa Tasker) la paso a una variable %HORADESPERTADOR; y en el Perfil Despertador pongo como contexto Valor de Variable: %HORADESPERTADOR = %TIME . ¿Voy bien encaminado?
Para mayor seguridad (por ejemplo, en caso de un reinicio del teléfono, que borraría las variables), al fijar la hora haré que ésta se guarde en un archivo de texto y que el teléfono lo lea tras el arranque, estableciendo la variable %HORADESPERTADOR. ¿Sigo bien?
Otra duda que tengo es si Tasker consumirá mucha más batería con este sistema que fijando el contexto a una hora determinada; el chequeo de variables lo hará cada x segundos mientras que el de la hora lo hará cada minuto.
¿Qué os parece? ¿Lo construimos entre todos?
Esto si que es casualidad Malkair! Acabo de entrar en el foro para compartir con vosotros lo que se de esto porque llevo toda la mañana rompiendome los cuernos, intentando hacer lo mismo que tu:
Como hacer que se realice una tarea a una hora determinada por variables:
(examinemos las posibilidades para ir descartando)
1- Con un contexto de tiempo: NO, no te deja poner variables.
2- Con un contexto de valor de variable: NO. De estado o de evento, da igual ninguno funciona. Ni la variable %TIME ni la variable %TIMES son dinamicas ni monitorizadas. O sea que Tasker no las va a estar controlando por eso creo que no te las deja poner en esos contextos. Te las deja poner en la segunda parte y en la primera la de usuario, pero claro tendriamos que dejar una tarea que nos fuera sumando segundo a segundo a la variable que hubiesemos creado, hasta que esta se igualara con %TIME/S, con el consiguiente derroche de batería.
Para dejarlo más claro por ejemplo jamás podremos hacer con estas variables se nos muestre un segundero. No nos deja.
3- Establecer una alarma: REGULAR. Es decir podemos crear una alarma con establecer alarma/categoria acciones de aplicación. Aqui te deja meterle variables tanto a los tiempos como a la etiqueta de la alarma.
Una vez hecho esto creamos un contexto de evento/dia-hora/despertador( en ingles creo que es Alarm Clok). Este evento cuando va a sonar inmediatamente una alarma. Además nos permite marcar una casilla, la de detener. Si hacemos esto la alarma no sonora, este evento cuando la detecte la parará. Y además tiene la posibilidad de que introduzcamos la etiqueta de la alarma para que este evento sólo actué si coincide con la de la alarma. Genial! con eso lo que hariamos sería crear una alarma mediante variables. Cuando esta alarma se fuera a disparar el contexto despertador se activa, nos quita la alarma (que es posible que no la queramos para nada) y nos ejecuta su tarea de entrada donde ahi si, ponemos que haga lo que realmente queramos y a la hora que queremos.
PROBLEMA: al parecer en no se si algunas apps de reloj o si es cosa de los modelos de movil, la etiqueta se guarda como tu la escribes. Es decir que si tu pones en la etiqueta: "Falsa alarma" en la acción establecer alarma,por ejemplo, y luego tu pones en el evento despertador en etiqueta "Falsa alarma", es posible que veas como el evento no se ha activado. Esto es porque a lo mejor tu movil guarda esa alarma no con la etiqueta que le hemos puesto si no con otra que el genera, y por tanto no va a coincidir.
4- Con la acción Esperar(Wait): (algunos pensareis que ahora pondré NO verdad? pues negativo pongo SI! ) Increible pero cierto. Tan facil como eso, Esta acción permite poner variables. Claro que pensareís que si se queda ocho horas esperando el movil no va a entrar en deep sleep y va a gastar muchisima batería no? Pues no. Resulta que al parecer según el mismo creador de tasker el movil SI entraría en deep sleep y cuando se acaba la espera Tasker es capaz de despertar el dispositivo:
"> I never did Wait because I was under the impression that a Wait task for hours could drain the battery. Is >this wrong?
Yes, Tasker sets an alarm so the phone can deep sleep during the Wait
if nothing else is going on. "
Extraido de : https://groups.google.com/forum/#!topic/tasker/ozAHHWNOLVg
Al parecer como esta tarea puede ser interferida por otras hay que ponerle la maxima prioridad, 10.
Habría que confirmar esto del todo, pero he leido otro mensaje que decia lo mismo. En todo caso debido a mi inglés algunas partes no las entiendo muy bien. A ver si alguno saca algo más en claro.
Ahora entiendo porque estaba puesto días en esperar, cuando a mi me parecía exageradisimo.
El único problema que le veo a esta accion wait, es que por ejemplo si lo utilizas en una apk se va a quedar en sgundo plano. Además si por alguna razón se apaga el dispositivo o tasker o la apk se cierran se iría al garete todo, aunque tampoco parecce fácil que pase esto y pensando que incluso podría tener una posible solucion que funcionase como mecanismo de seguridad. Sería utilizando el contexto apagado del dispositivo, guardariamos los datos relevantes para cuando se vuelva a encender volver a disparar la tarea de esperar.
Sobre algunas consultas que haces:
Buenas, no sé si queda claro el título.
Yo le pondría ...mediante variables.
Es decir, creo una tarea independiente que me pide entrar texto (esto no lo he hecho nunca, supongo que se hará a través de las escenas), fijo hora y minutos; esta hora y minutos (previamente pasada al formato HH.MM que usa Tasker) la paso a una variable %HORADESPERTADOR; y en el Perfil Despertador pongo como contexto Valor de Variable: %HORADESPERTADOR = %TIME . ¿Voy bien encaminado?
Tanto la alarma como la acción esperar usan variables independientes para horas y minutos o sea que creo que no hace falta. Si metes metes en minutos 95 pones 95 no 01:35. No se si me explico?
Para mayor seguridad (por ejemplo, en caso de un reinicio del teléfono, que borraría las variables), al fijar la hora haré que ésta se guarde en un archivo de texto y que el teléfono lo lea tras el arranque, estableciendo la variable %HORADESPERTADOR. ¿Sigo bien?
Las variables que contienen una Mayuscula al menos Tasker las guarda,incluso después de reiniciar, no hace falta.
¿Qué os parece? ¿Lo construimos entre todos?
Me apunto,cuenta conmigo.
Caravantes
28/06/13, 02:10:26
Para mayor seguridad (por ejemplo, en caso de un reinicio del teléfono, que borraría las variables),
No. El reinicio del smartphone no borra las variables de Tasker. El manual dice
Tiempo de Vida de las Variables. Los valores de las Variables deben persistir mientras Tasker se instala, e incluso tras un reinicio del dispositivo.
http://tasker.dinglisch.net/userguide/es/variables.htmlConcretando: las variables globales (las que tienen alguna letra mayúscula y mantienen su valor aunque sean usadas en distintas tareas) conservan su valor durante el reinicio e incluso aunque el aparato esté apagado durante horas o días.
Las variables locales (que tienen todas las letras en minúscula) ya sabemos que son eliminadas cuando la tarea finaliza, y por eso no tiene lógica esperar que sigan vivas tras reiniciar.
malkair
28/06/13, 11:09:15
Mmm... mlesir, no veo del todo claro el uso de WAIT para lo pretendido. O tal vez sí. Veamos:
Si fijamos la hora en tarea aparte (esto es sencillo), no sería difícil calcular el tiempo que resta desde el momento actual hasta la hora que hemos fijado. Digamos que son las 10:50 y fijamos la hora de alarma a las 16:50, faltarían 6 horas. ¿Quieres decir que tendríamos que hacer un WAIT de 6 horas hasta que suene la alarma?
Lógicamente, como dices, en caso de crash o reinicio ese WAIT se va al garete (aunque perdurará la variable -cosa que no sabía-). Pero lo podríamos solucionar como dije, escribiendo un archivo con la hora fijada para que fuera leído tras un reinicio o, para mayor segurança, cada x tiempo: lee la hora que fijamos; si no coincide con el valor de la variable %HORADESPERTADOR, se recalcula por Tasker el tiempo que falta hasta que llegue esa hora y establece un nuevo WAIT.
Sería algo así:
[escena chula para fijar la hora de alarma]
Tendremos la variable %HORADESPERTADOR
Tarea: CalcularHora:
Escribimos %HORADESPERTADOR en un archivo horadespertador.txt (sin añadir)
Calculamos los minutos que faltan desde %TIME hasta %HORADESPERTADOR y establecemos la variable %FALTANMINUTOS
WAIT %FALTANMINUTOS minutos.
Y disparamos la tarea de despertador.
Perfil para chequear si la alarma sigue siendo la correcta:
Contexto: On Boot
Tarea:
- Leer archivo horadespertador.txt y pasar contenido a variable %checkdespertador
- SI %checkdespertador !~ %HORADESPERTADOR
--- SET VARIABLE %HORADESPERTADOR a %checkdespertador
--- Ejecutamos tarea CalcularHora
--- Detener
- FIN SI
¿Vamos bien?
Mmm... mlesir, no veo del todo claro el uso de WAIT para lo pretendido. O tal vez sí. Veamos:
Si fijamos la hora en tarea aparte (esto es sencillo), no sería difícil calcular el tiempo que resta desde el momento actual hasta la hora que hemos fijado. Digamos que son las 10:50 y fijamos la hora de alarma a las 16:50, faltarían 6 horas. ¿Quieres decir que tendríamos que hacer un WAIT de 6 horas hasta que suene la alarma?
- Exactamente eso es lo que quiero decir. Ayer probe a que esperará una hora para establecer una variable. Efectivamente después de una hora la variable había tomado ese valor. Me falta comprobar si el móvil entra en deep sleep. Tengo q buscar una app q pueda corroborarlo...
Lógicamente, como dices, en caso de crash o reinicio ese WAIT se va al garete (aunque perdurará la variable -cosa que no sabía-). Pero lo podríamos solucionar como dije, escribiendo un archivo con la hora fijada para que fuera leído tras un reinicio o, para mayor segurança, cada x tiempo: lee la hora que fijamos; si no coincide con el valor de la variable %HORADESPERTADOR, se recalcula por Tasker el tiempo que falta hasta que llegue esa hora y establece un nuevo WAIT.
- No hace falta lo del archivo. Basta con meterlo en una variable. En ella podríamos meter la fecha y la hora, algo asi : 28-06-2013 13:34 Hay q meter la fecha pq si no puede haber confusiones.
Sería algo así:
[escena chula para fijar la hora de alarma]
Tendremos la variable %HORADESPERTADOR
- Lo más simple seria con consulta de variable. Tb lo podemos introducir con get voice, autovoice, etc. Y por supuesto con una escena claro.
Tarea: CalcularHora:
Escribimos %HORADESPERTADOR en un archivo horadespertador.txt (sin añadir)
Calculamos los minutos que faltan desde %TIME hasta %HORADESPERTADOR y establecemos la variable %FALTANMINUTOS
WAIT %FALTANMINUTOS minutos.
Y disparamos la tarea de despertador.
- Bueno esto se puede hacer de muchas maneras. Por ejemplo : con la acción convertir variable pasamos %HORADESPERTADOR a segundos y le restamos %TIMES. Así creamos %FALTANSEGUNDOS.
En todo caso lo importante es: hay que meter fecha en la variable que guardemos. Imagínate q pongo una alarma para dentro de dos horas, pero la pongo a las once de la noche... Eso ya es para otro día.
Recordarte lo de la acción convertir variable que nos puede simplificar mucho la cosa.
Por último hay que tener en cuenta si cuando introducimos el tiempo metemos la hora a la que queremos que se dispare la tarea o el tiempo que queremos hasta que se dispare (por ejemplo para dentro de dos horas).. porque la cosa cambia.
Perfil para chequear si la alarma sigue siendo la correcta:
Contexto: On Boot
Tarea:
- Leer archivo horadespertador.txt y pasar contenido a variable %checkdespertador
- SI %checkdespertador !~ %HORADESPERTADOR
--- SET VARIABLE %HORADESPERTADOR a %checkdespertador
--- Ejecutamos tarea CalcularHora
--- Detener
- FIN SI
Aquí es donde difiero. Yo lo que haría seria:
Contexto: On Boot
Tarea:
- SI %HORADESPERTADOR !~ %* (o sea NO esta vacia)
--- Ejecutamos tarea CalcularHora
---ELSE
--- Detener
- FIN SI
Lo explico. Cuando se dispare la alarma lo que deberíamos hacer es borrar %HORADESPERTADOR. De esta manera cada vez que reiniciamos el móvil podremos comprobar si se ha quedado en el tintero alguna alarma pq si %HORADESPERTADOR no está vacía es que la alarma ni se ha ejecutado dado que siempre que ejecutamos la alarma la borramos.
Incluso seria posible avisar de que se ha pasado el tiempo y la alarma ha quedado digamos desfasada.
Lo mismo se puede hacer si quieres seguir utilizando lo de escribir archivo por ejemplo escribiendo VACIO. E incluso puedes meter varias alarmas.... una línea una alarma. Pero solo un wait el de la alarma más próxima. Luego el wait va comiendo la siguiente y asi (pero bueno esto ya sería rizar el rizo aunque no sería dificil).
Para el otro problema el de que por ejemplo se nos cierre tasker por un fallo sin que suponga un reinicio podemos crear un perfil de tarea ejecutándose, la de wait. Si está activo no hace nada dado que eso es que esta esperando pero como tarea de salida le podemos meter que vuelva a activar el wait.
Este Perfil se habilita cuando establecemos la alarma y se deja deshabilitado cuando por fin suene la alarma o haga libque tenga que hacer.
- Otras observaciones : quizá lo mejor es utilizar lo de establecer Alarma y luego detectarla con despertador, eso sí eres de los que la etiqueta se la detecta el móvil, no como a mi.
Aunque también es cierto que lo de wait simplifica mucho. La cosa se complica pq estamos queriendo meterle digamos el mecanismo de seguridad si no la cosa está ya hecha, tan fácil como meter un wait con la variable del tiempo.
Segundo: se me paso que tb se puede utilizar evento de calendario si no te detecta la etiqueta.
¿Vamos bien?
- Pues yo creo que si. Gracias a ti. Mira que era fácil lo de escribir los datos según se generaba la alarma y dps comprobar los en un reinicio mientras que yo me estaba armando el taco pensando escribir lo mismo cuando tasker detectará que se apagaba el móvil y pensando a ver si le daba tiempo a meter los datos antes de apagarse, con lo fácil que era, menos mal que lo has pensado tu.
quique_cortes
14/12/15, 09:39:02
¿Qué os parece? ¿Lo construimos entre todos?
solucionado, cambia el titulo a "solucionado"
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.