PDA

Ver la Versión Completa : Mis perfiles para la salida y puesta del sol


z3us
13/08/13, 09:45:10
Bueno, voy a compartir con vosotros mi última creación. Creo que el código me ha quedado algo lioso y seguro que me podéis ayudar a mejorarlo. Yo lo uso sobre todo para mis salidas a hacer senderismo o montar en bici, para que me avise de cuándo se pone el sol y que no me pille la noche.

- Primer perfil: Este perfil se activa todos los días a las 00:30, y lo que hace es sacar de la web www.wunderground las horas en que va a salir y ponerse el sol en el día que acaba de comenzar en el sitio en el que estoy:


Calcular Salida Y Puesta Del Sol (34)
A1: HTTP Get [ Servidor:Puerto:http://api.wunderground.com Ruta:api/7669ca23184907a1/forecast/conditions/astronomy/q/%LOCN.xml Atributos: Cookies: Cuenta atrás:10 Tipo Mime:text/xml Archivo de salida:amanecer.txt ]
A2: Establecer variable [ Nombre:%sol A:%HTTPD Calcular:Apagado Añadir:Apagado ]
Guardo el código html de la página en la variable sol

A3: Separar variable [ Nombre:%sol Separador:<sunset Eliminar base:Apagado ]
A4: Separar variable [ Nombre:%sol2 Separador:<hour> Eliminar base:Apagado ]
A5: Separar variable [ Nombre:%sol22 Separador:</hou Eliminar base:Apagado ]
A6: Separar variable [ Nombre:%sol23 Separador:</hou Eliminar base:Apagado ]
A7: Establecer variable [ Nombre:%hocaso A:%sol221 Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%hamanecer A:%sol231 Calcular:Apagado Añadir:Apagado ]
Guardo la hora en que amanece y se pone el sol en %hocaso y %hamanecer, ambas en formato 24h

A9: Separar variable [ Nombre:%sol2 Separador:<minute> Eliminar base:Apagado ]
A10: Separar variable [ Nombre:%sol22 Separador:</minute Eliminar base:Apagado ]
A11: Separar variable [ Nombre:%sol23 Separador:</minut Eliminar base:Apagado ]
A12: Establecer variable [ Nombre:%mocaso A:%sol221 Calcular:Apagado Añadir:Apagado ]
A13: Establecer variable [ Nombre:%mamanecer A:%sol231 Calcular:Apagado Añadir:Apagado ]
Guardo los minutos en que amanece y se pone el sol en %mamanecer y %mocaso

<Calculamos segundos amanecer y ocaso>
A14: Establecer variable [ Nombre:%Horaamanecer A:%DATE %hamanecer.%mamanecer Calcular:Apagado Añadir:Apagado ]
A15: Convertir Variable [ Nombre:%Horaamanecer Función:Fecha Hora a Segundos Almacenar Resultado en:%Amanecer ]
A16: Establecer variable [ Nombre:%Horaocaso A:%DATE %hocaso.%mocaso Calcular:Apagado Añadir:Apagado ]
A17: Convertir Variable [ Nombre:%Horaocaso Función:Fecha Hora a Segundos Almacenar Resultado en:%Ocaso ]
Aquí he juntado fecha, hora y minutos, para poder convertirlo en segundos y guardarlo en %Amanecer y %Ocaso

A18: Realizar tarea [ Nombre:Salida Y Puesta Del Sol Parar:Apagado Prioridad:5 Parámetro 1 (%par1): Parámetro 2 (%par2): Devolver Valor de Variable: ]
Ejecuto otra tarea, en la que proceso la información obtenida, y está incluida en el segundo perfil...



Segundo perfil: Se ejecuta cada vez que reinicio el móvil, y así salvo los wait. La tarea que contiene este perfil también se ejecuta todos los días después del primer perfil, a las 00:30

Salida Y Puesta Del Sol (39)
A1: Establecer variable [ Nombre:%Segundosparaamanecer A:%Amanecer Calcular:Apagado Añadir:Apagado ]
A2: Establecer variable [ Nombre:%Segundosparaocaso A:%Ocaso Calcular:Apagado Añadir:Apagado ]
Aquí creo las variables que van a contener los segundos que quedan para amanecer u ocaso

A3: Restar de variable [ Nombre:%Segundosparaamanecer Valor:%TIMES ]
A4: Restar de variable [ Nombre:%Segundosparaocaso Valor:%TIMES ]
Aquí calculo los segundos que restan para la salida y puesta del sol de hoy

A5: Si (if) [ %Segundosparaamanecer > 0 ]
A6: Esperar [ MS:0 Segundos:%Segundosparaamanecer Minutos:0 Horas:0 Días:0 ]
A7: AutoRemote Notification [ Configuración:Recipient: Myself]
A8: Ir a acción [ Tipo:Número Acción Número:10 Etiqueta: ]
A9: Fin si (End if)
Este if actúa si hoy todavía no ha amanecido: espera los segundos que sean, me salta la notificación cuando salga el sol, y se va al paso 10 para esperar la puesta del sol.

A10: Si (if) [ %Segundosparaamanecer < 0 ]
A11: Si (if) [ %Segundosparaocaso > 0 ]
A12: Esperar [ MS:0 Segundos:%Segundosparaocaso Minutos:0 Horas:0 Días:0 ]
A13: AutoRemote Notification [ Configuración:Recipient: Myself]
Este if actúa si estamos entre el amanecer y la puesta del sol: espera los segundos hasta el ocaso, y me salta la notificación

A14: Else
A15: Detener [ Con error:Apagado Tarea: ]
Si ya se ha puesto hoy el sol, se detiene la tarea




¿qué os parece? ¿cómo puedo mejorarlo?

mlesir
13/08/13, 14:05:01
A falta de estudiarlo con más tiempo me parece bien, enhorabuena.
Podrías enviar un ejemplo de como te mete la información de la Web antes de que luego la procesos? . Lo digo para ver si se puede agilizar o utilizar menos acciones.
Muy buena la manera de asegurarte de que el wait va a estar funcionando incluso después de un reinicio.
Otra pregunta, seguro q tiene su explicación y por eso me da curiosidad saber por qué autoremote? Por que no una notificacion de tasker o cualquier otra?

z3us
13/08/13, 14:15:31
Podrías enviar un ejemplo de como te mete la información de la Web antes de que luego la procesos? . Lo digo para ver si se puede agilizar o utilizar menos acciones.
¿Te refieres a cómo voy cortando el html para llegar a lo que me interesa? Pues la verdad es que no me acuerdo, lo hize hace ya un par de días.

Este sería un ejemplo, para http://api.wunderground.com/api/7669ca23184907a1/forecast/conditions/astronomy/q/43.542064,-5.66453.xml
No está la página entera, sólo lo que me interesa

<moon_phase>
<percentIlluminated>40</percentIlluminated>
<ageOfMoon>6</ageOfMoon>
<current_time>
<hour>14</hour>
<minute>17</minute>
</current_time>
<sunset>
<hour>21</hour>
<minute>28</minute>
</sunset>
<sunrise>
<hour>7</hour>
<minute>25</minute>
</sunrise>
</moon_phase>
<sun_phase>
<sunset>
<hour>21</hour>
<minute>28</minute>
</sunset>
<sunrise>
<hour>7</hour>
<minute>25</minute>
</sunrise>
</sun_phase>
</response>

Muy buena la manera de asegurarte de que el wait va a estar funcionando incluso después de un reinicio.
Es fundamental para mí. Mi Note tiene el usb jodido, y cuando se me acaba la batería tengo que cambiarla por otra cargada externamente, así que reinicio con frecuencia.

Otra pregunta, seguro q tiene su explicación y por eso me da curiosidad saber por qué autoremote? Por que no una notificacion de tasker o cualquier otra?
Autoremote, como autonotification, permite personalizar mucho más las notificaciones. Más de lo que necesito, pero ya que lo tengo comprado e instalado para otras tareas, pues lo meto aquí.

maidenhead
15/08/13, 17:33:06
Hola,
En los ejemplos de la wiki de tasker tienes un profile que te saca la salida y puesta de sol.
No se conecta a ninguna web, solo usa la antena para saber la ubicación y así calcular estos valores.

http://tasker.wikidot.com/sunrisesunset

Hace uso de un javascript que tiene todas las fórmulas del cálculo en función de la posición.

Junto con el plugin minimalistic lo uso para mostrar en pantalla el amanecer y la puesta de sol. Y así no dependes de páginas web externas.
Saludos.

z3us
15/08/13, 18:13:22
Gracias.
Ya lo había visto, pero no sabía muy bien cómo colocar el archivo java.
Y también prefiero tenerlo todo metido en tareas para cuando haga copia de seguridad de mis perfiles

z3us
24/08/13, 10:12:30
Bueno, aquí pongo la segunda versión de mis perfiles, que es la que uso. Ahora, en vez de andar con engorrosos wait, if, procesos al reiniciar, etc., lo que hago es insertar los eventos solares en un calendario (gracias a Caravantes por la sugerencia). Dicho calendario lo he creado nuevo, y lo tengo oculto en widgets, calendario android, etc. Lo único que hay que tener en cuenta es que, para insertar un evento nuevo en un calendario en Tasker, tenemos que meter como valor el número de minutos que faltan para ese evento desde el momento actual.

- Primer perfil:
Calculamos cuántos minutos quedan para el próximo amanecer y puesta del sol, y creamos los eventos en un calendario google aparte. Al igual que en la primera versión, sacamos la info de wunderground, y el perfil se ejecuta todos los días a las 00:30

Calcular Salida Y Puesta Del Sol Calendario (47)
A1: HTTP Get [ Servidor:Puerto:http://api.wunderground.com Ruta:api/7669ca23184907a1/forecast/conditions/astronomy/q/%LOCN.xml Atributos: Cookies: Cuenta atrás:10 Tipo Mime:text/xml Archivo de salida:amanecer.txt ]
A2: Establecer variable [ Nombre:%sol A:%HTTPD Calcular:Apagado Añadir:Apagado ]
A3: Separar variable [ Nombre:%sol Separador:<sunset Eliminar base:Apagado ]
A4: Separar variable [ Nombre:%sol2 Separador:<hour> Eliminar base:Apagado ]
A5: Separar variable [ Nombre:%sol22 Separador:</hou Eliminar base:Apagado ]
A6: Separar variable [ Nombre:%sol23 Separador:</hou Eliminar base:Apagado ]
A7: Establecer variable [ Nombre:%hocaso A:%sol221 Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%hamanecer A:%sol231 Calcular:Apagado Añadir:Apagado ]
A9: Separar variable [ Nombre:%sol2 Separador:<minute> Eliminar base:Apagado ]
A10: Separar variable [ Nombre:%sol22 Separador:</minute Eliminar base:Apagado ]
A11: Separar variable [ Nombre:%sol23 Separador:</minut Eliminar base:Apagado ]
A12: Establecer variable [ Nombre:%mocaso A:%sol221 Calcular:Apagado Añadir:Apagado ]
A13: Establecer variable [ Nombre:%mamanecer A:%sol231 Calcular:Apagado Añadir:Apagado ]
<Calculamos segundos amanecer y ocaso>
A14: Establecer variable [ Nombre:%Horaamanecer A:%DATE %hamanecer.%mamanecer Calcular:Apagado Añadir:Apagado ]
A15: Convertir Variable [ Nombre:%Horaamanecer Función:Fecha Hora a Segundos Almacenar Resultado en:%amanecer ]
A16: Establecer variable [ Nombre:%Horaocaso A:%DATE %hocaso.%mocaso Calcular:Apagado Añadir:Apagado ]
A17: Convertir Variable [ Nombre:%Horaocaso Función:Fecha Hora a Segundos Almacenar Resultado en:%ocaso ]
Hasta aquí es igual que en la primera versión: tenemos calculado el momento, en segundos, en que va a salir y ponerse el sol, en las variables %amanecer y %ocaso


<calculamos segundos hasta salida y puesta>
A18: Restar de variable [ Nombre:%amanecer Valor:%TIMES ]
A19: Restar de variable [ Nombre:%ocaso Valor:%TIMES ]


<calculamos minutos hasta salida y puesta y redondeo>
A20: Establecer variable [ Nombre:%Minutosparaocaso A:round(%ocaso/60) Calcular:Encendido Añadir:Apagado ]
A21: Establecer variable [ Nombre:%Minutosparaamanecer A:round(%amanecer/60) Calcular:Encendido Añadir:Apagado ]


<insertamos en calendario>
A22: Insertar en calendario [ En / Durante (minutos):%Minutosparaamanecer Calendario:Google:Sol Título:Amanecer Descripción:Amanecer Ubicación: Disponible:Apagado Todo el día:Apagado ]
A23: Insertar en calendario [ En / Durante (minutos):%Minutosparaocaso Calendario:Google:Sol Título:Puesta del sol Descripción:Puesta del sol Ubicación: Disponible:Apagado Todo el día:Apagado ]

Aquí hemos creado los dos eventos en el calendario Sol para hoy, con los títulos Amanecer y Puesta del sol




- Segundos perfiles
En este caso no es uno, sino dos los perfiles: uno para el amanecer, y otro para el ocaso. Pero son muy sencillos.
- En contexto usaremos Estado/ Aplicación / Entrada en calendario. En el campo título, pondremos "Amanecer" y "Puesta del Sol" (podemos usar la lupa para encontrarlos fácilmente, si ya hemos ejecutado el primer perfil previamente). En el campo Calendario, seleccionamos el calendario en el que estemos creando los eventos en el primer perfil, en mi caso "Google:Sol" (con la lupa nuevamente, si ya hemos creado el calendario)

-Como tarea, lo que queramos que ocurra cuando amanezca o se vaya el sol. En mi caso, sigo usando una notificación y un sonido con AutoRemote



¿sugerencias?