Tasker Para hablar de todo lo relacionado con la aplicación tasker

Respuesta
 
Herramientas
  #1  
Viejo 06/11/17, 19:14:52
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
Procesar los XML de AEMET (versión Código>JavaScript)

- - ADVERTENCIA - -
Este tutorial está basado en otro en el que explicaba cómo procesar los XML de la predicción meteorológica de AEMET usando código JavaScript metido en una acción JavaScriptlet. No es imprescindible, pero te recomiendo que leas el otro tutorial antes para que tengas una visión más completa del tema.

[Tutorial] Procesar los XML de AEMET (versión Código>JavaScriptlet)
- - - -

Dando respuesta a una propuesta de @Mitrhandir [mensaje #22 de este tema] he juntado el código JS de mi solución inicial [mensaje #1 de este tema] en un único script que procesa los dos XML de AEMET. La verdad es que he ido un poco más lejos y esta "nueva solución" que propongo casi permite olvidarse del código JS porque no se ve/toca para nada.

En pocas palabras, en vez meter todo el código necesario en una acción JavaScriptlet lo vamos a meter en un archivo que ejecutaremos desde una acción JavaScript. Y para no tener que tocar el contenido de ese archivo usaremos variables de Tasker para hacer los pocos ajustes necesarios.

Esta "nueva solución" de la que hablo en realidad son dos diferentes [mensaje #23 de este tema]. La primera, bastante simple y que ya tenía medio hecha, que devuelve la predicción de un único día/periodo en variables locales de Tasker. Y la segunda, mucho más potente, que devuelve la predicción de varios días/periodos en arrays locales de Tasker.

¿Por qué dos soluciones diferentes? ... Pues la verdad es que sobra la primera ya que la segunda puede hacer lo mismo y mucho más. Pero la primera ya la tenía hecha y si sólo requieres la predicción para un día/hora concretos te puede valer perfectamente. Por contra, si la tarea que tienes en mente requiere algo más que la predicción de un día/hora concretos no lo dudes y usa la segunda solución.

Como he dicho al principio, todo el código necesario está metido en un archivo. Para la solución que devuelve variables (la primera) el archivo se llama aemet_var.js. Para la solución que devuelve arrays (la segunda) el archivo se llama aemet_arr.js. Y ambos se "ajustan" igual, por medio de unas pocas variables (%aemet_xxx) que modifican los valores que tienen por defecto.

Variables %aemet_xxx

%aemet_xml ... pmhoras | pm7dias

Si la estableces en la tarea el código JS comprobará si el tipo de XML contenido en %HTTPD coincide con su valor. Es una forma simple de comprobar que has descargado el XML que pretendías.

%aemet_dedias ... número

Establece el número máximo de fechas que se procesarán. Para aemet_var.js el valor por defecto es 1 y no puede ser otro. Para aemet_arr.js el valor por defecto se ajustará al máximo posible para cada tipo de XML.

Para que aemet_arr.js se comporte como aemet_var.js y sólo devuelva los datos de un día se asigna %aemet_dedias=1 y tema resuelto.

%aemet_dehoras ... hora-hora | hora,hora | lista de horas/rangos

Establece de qué horas se extraerán datos. Para aemet_var.js el valor por defecto es 1 y no puede ser otro. Para aemet_arr.js el valor por defecto dependerá de si %aemet_dedias=1, en cuyo caso será la hora actual, o %aemet_dedias>1, en cuyo caso será 00-23. Es posible especificar valores concretos o rangos separándolos con comas.

Si quieres datos de la seis primeras horas del día, las 12, las 15 y las dos horas previas a la media noche, lo puedes hacer así: %aemet_dehoras=00-05,12,15,22-23

%aemet_endias ... número

Establece el número de días que se sumarán al momento actual para calcular la primera fecha a procesar. El valor por defecto es 0.

Si quieres los datos de mañana asigna %aemet_endias=1 ... para pasado mañana %aemet_endias=2 ... y así sucesivamente.

%aemet_enhoras ... número

Establece el número de horas que se sumarán al momento actual para calcular la primera fecha a procesar. El valor por defecto es 0.

Si quieres la previsión para dentro de 6 horas asigna %aemet_enhoras=6.

%aemet_perhora ... h0 | h6 | lista de horas* [ver la función periodo() en el mensaje #1 de este tema]

Establece las horas de las que se extraerán datos en el formato correspondiente al tipo de XML. Si %aemet_dedias=1 su valor se ajustará para extraer los datos correspondientes al momento actual. Si %aemet_dedias>1 (sólo en aemet_arr.js) su valor se ajustará para extraer todos los datos disponibles.

*Para aemet_arr.js es posible establecer una lista de horas (valores de hora válidos separados por comas). Ejemplo: 01,06,12,18.

%aemet_perrango ... r6 | r6- | r12- | r24- | lista de rangos* [ver la función periodo() en el mensaje #1 de este tema]

Establece los rangos de los que se extraerán datos en el formato correspondiente al tipos de XML. Si %aemet_dedias=1 su valor se ajustará para extraer los datos correspondientes al momento actual. Si %aemet_dedias>1 (sólo en aemet_arr.js) su valor se ajustará para extraer todos los datos disponibles.

*Para aemet_arr.js es posible establecer una lista de rangos (valores de rango válidos separados por comas). Ejemplo: 00-06,12-24.

...

Como ya he comentado todas las variables %aemet_xxx son opcionales. Si no se definen en la tarea el código JS las creará y calculará los valores adecuados para cada caso de forma que serán consultables/utilizables una vez ejecutada la acción JavaScript.

Casos prácticos

Veamos cómo ajustar las variables %aemet_xxx para extraer datos de predicción concretos.

Datos de ahora mismo con aemet_var.js

- XML de AEMET indiferente
- Variables %aemet_xxx sin establecer

Datos de ahora mismo con aemet_arr.js

- XML de AEMET indiferente
- %aemet_dedias=1

Datos para dentro de 12 horas con aemet_var.js

- XML de AEMET indiferente
- %aemet_enhoras=12

Datos para dentro de 12 ahoras con aemet_arr.js

- XML de AEMET indiferente.
- %aemet_dedias=1
- %aemet_enhoras=12

De la previsión para 7 días, los datos de 2 días desde mañana con aemet_arr.js

- %aemet_xml=pm7dias
- %aemet_dedias=2
- %aemet_endias=1

De la previsión por horas, las tres horas centrales de mañana con aemet_arr.js

- %aemet_xml=pmhoras
- %aemet_dedias=1
- %aemet_dehoras=11-13
- %aemet_endias=1

Valores devueltos

Los datos generales del XML son siempre devueltos en las variables locales ... %enlace / %elaborado / %nombre / %provincia ... indistintamente del tipo de XML o del archivo *.js con el que sea procesado.

En cuanto a los datos de la predicción ambos archivos *.js devuelven todos los valores relevantes de cada tipo de XML con los mismos nombres base para las variables y los arrays.

¿Los mismos nombres base?

Para la dirección del viento he usado como nombre base dirviento. Si usas aemet_var.js el dato estará en la variable local %dirviento y si usas aemet_arr.js los datos estarán en el array local %dirviento() ... ¿aclarado?

En la predicción por horas los nombres base son: diapred / perpred* / orto / ocaso / descielo / estcielo / lluvia / nieve / temp / senter / humrel / dirviento / velviento / rachamax / problluvia / probtorm / probnieve / icocielo / icoviento / vientodel.

En la predicción para 7 días los nombres base son: diapred / perpred* / problluvia / cotanieve / descielo / estcielo / dirviento / velviento / rachamax / tempmax / tempmin / sentermax / sentermin / hummax / hummin / uvmax / dtem / dste / dhre / icocielo / icoviento / icouvmax / vientodel.

*Este dato sólo se define, como array, en el archivo aemet_arr.js

Máximos y mínimos

Estos datos sólo están disponibles si se usa el archivo aemet_arr.js, por razones evidentes. En un primer momento me limité a extraer el valor máximo o mínimo de cada dato numérico [mensaje #10 de este tema], pero después de pensarlo un poco me ha parecido mucho más interesante extraer el valor máximo y el mínimo de forma que para cada dato numérico tenemos su valor más alto y más bajo. Todos estos datos están disponibles en una serie de arrays con los mismos nombres base que los datos correspondientes más el sufijo _ab ...

Predicción de 7 días: problluvia_ab / cotanieve_ab / velviento_ab / rachamax_ab / tempmax_ab / tempmin_ab / sentermax_ab / sentermin_ab / hummax_ab / hummin_ab / uvmax_ab.

Predicción por horas: lluvia_ab / nieve_ab / temp_ab / senter_ab / humrel_ab / velviento_ab / rachamax_ab / problluvia_ab / probtorm_ab / probnieve_ab.

En esos arrays, el índice 1 apunta al valor más alto y el índice 2 al más bajo del array del dato correspondiente a su nombre base.

Supongamos que queremos saber qué día está prevista la temperatura máxima más alta y la mínima más baja ...

máxima más alta ... %tempmax_ab1=4 ... %tempmax4=20 ... %diapred4=2017-11-04 ... %perpred4=12-18
mínima más baja ... %tempmin_ab2=9 ... %tempmin9=-2 ... %diapred9=2017-11-06 ... %perpred9=00-06

... así que el día 04, de 12 a 18, tendremos la máxima más alta con 20º y el día 06, de 00 a 06, la mínima más baja con -2º ... fácil.

Los datos de problluvia/probtorm/probnieve son listas de valores numéricos emparejados con los rangos horarios de %perpred(). Para que no tengáis que procesar eso he añadido un par de valores más a sus arrays _ab. En los índices 3/5 están el valor máximo y su periodo. Y en los índices 4/6 el valor mínimo y su periodo.

Como recordatorio ... %tempmax_ab(1) es lo mismo que %tempmax_ab1 y si eso vale 4 entonces %tempmax(%tempmax_ab1) es lo mismo que %tempmax4 ... lo digo por si acaso.

Archivos aemet_xxx.js y tareas de ejemplo

He dejado todos los archivos en el [Repositorio de tareas Tasker] de ATaskREADOS ...

https://tinyurl.com/ATaskREADOS ***

... concretamente en la carpeta "Procesar los XML de AEMET - WillyWeb".

*** El software del foro impide que el enlace funcione adecuadamente. Copia y pega la URL en la barra de direcciones.

Las tareas (archivos *.tsk.xml) simplemente son pequeñas "demos" que extraen y muestran todos los datos disponibles en cada XML. Insisto, no procesan o interpretan los datos, simplemente los muestran. Están listas para importar en Tasker y no creo que requieran muchas explicaciones. De todas formas su estructura es muy simple ...

A1 asigna el INE en %par1
A2 y A3 descargan cada uno de los XML de AEMET (por horas o 7-días)
A4 a A8 asignan valor a las variables %aemet_xxx más significativas
A9 ejecuta el script aemet_xxx.js
A10 en adelante generan un archivo plain/text con los resultados
Axx la última acción abre ese archivo con cualquier aplicación disponible

Los archivos aemet_var.js y aemet_arr.js se deben copiar en la raíz de la memoria interna de vuestro dispositivo. Si los ponéis en otro sitio deberéis seleccionar la nueva ubicación en la acción #9 de cada tarea. Y ojo con seleccionar el archivo aemet_xxx.js que corresponde a cada tarea.

Preguntas del millón

Las tareas no me avisan de si mañana va a llover, ¿por qué?

Porque ese no es su propósito. Simplemente son "demos" para que veas todos los datos disponibles y la forma de sacar los máximos y mínimos.

Las tares procesan ambos XML pero no al mismo tiempo, ¿es que no se puede?

Pues se debería poder haciendo algo así ...

- Descargar uno de los XML
- Ejecutar el archivo aemet_var.js
- Descargar el otro XML
- Ejecutar el archivo aemet_var.js

... pero haz la prueba y nos cuentas.

Lo de procesar ambos XML al mismo tiempo está muy bien, pero ¿se puede hacer también con aemet_arr.js?

... pues no sabría decirte ... haz la prueba y nos cuentas.

Las tareas de prueba son algo lentas, sobre todo la que devuelve arrays ... ¿qué pasa?

Pues veamos lo que pasa ...

Cuando el script aemet_arr.js procesa el XML de la previsión por horas saca 26 datos de cada una de sus 48 horas. Eso son 1248 datos leídos del XML. A continuación se procesan 19 datos de las 48 horas para localizar los valores más altos y más bajos. Eso reduce 912 datos a 32. Después la tarea genera un archivo de texto con todos esos datos y unos pocos más. El proceso del XML de la previsión de 7 días es similar. No digo que el código JS sea una maravilla. Y tampoco es que ayude mucho el interprete JS de Tasker. Pero dos/tres segundos me parece un tiempo razonable para lo que hacen esas tareas ... ¿no te parece?



Ufff, eso es todo.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)

Última edición por WillyWeb Día 26/04/20 a las 18:44:07. Razón: Corregir URL del repositorio
Responder Con Cita
Los siguientes 4 usuarios han agradecido a WillyWeb su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]


  #2  
Viejo 07/11/17, 09:22:27
Array

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
Impresionante. Muchísimas gracias.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
  #3  
Viejo 07/11/17, 13:32:22
Array

[xs_avatar]
Mitrhandir Mitrhandir no está en línea
Usuario muy activo
 
Fecha de registro: ene 2014
Localización: Burrifornia
Mensajes: 910
Modelo de smartphone: Huawei Ascend G7
Tu operador: Yoigo
Yo creo que @WillyWeb se merece una copa virtual pero de largo!

Yo aún estoy trasteando y no he logrado aún que en los 7 días me diga lo que quiero saber. Y me fastidia porque aquí se han desplomado las temperaturas sin aviso.

Muchas gracias WillyWeb!
__________________
Si la educación te parece cara, prueba con la ignorancia.
Responder Con Cita
  #4  
Viejo 07/11/17, 14:13:01
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
Yo aún estoy trasteando y no he logrado aún que en los 7 días me diga lo que quiero saber...
Me arrepentiré ... seguro que me arrepentiré ...



Supongo que ya tienes los datos. Vamos, estoy seguro porque las tareas "demo" que he dejado en el repositorio los sacan directamente. Así que ese no debería ser el problema.

Te voy a repetir lo que te he dicho anteriormente...

Define claramente el problema y la solución que quieres conseguir. No se trata de escribir código o liarte a meter acciones en una tarea. Simplemente planea mentalmente la forma de llegar a lo que quieres partiendo de lo que tienes.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
Responder Con Cita
  #5  
Viejo 07/11/17, 17:10:22
Array

[xs_avatar]
Mitrhandir Mitrhandir no está en línea
Usuario muy activo
 
Fecha de registro: ene 2014
Localización: Burrifornia
Mensajes: 910
Modelo de smartphone: Huawei Ascend G7
Tu operador: Yoigo
Lo único que quiero es que "rastree" una o dos veces al día y que cuando se den valores "anormales", salte una escena y me diga cuándo y qué valores serán "anormales". No estoy pidiendo peras al olmo. Pero aquí por lo visto el único "anormal" soy de lo torpe que soy!
__________________
Si la educación te parece cara, prueba con la ignorancia.
Responder Con Cita
  #6  
Viejo 07/11/17, 18:17:32
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
Lo único que quiero es que "rastree" una o dos veces al día y que cuando se den valores "anormales", salte una escena y me diga cuándo y qué valores serán "anormales"...
Ya. La carta a los Reyes Magos.

La única palabra que he entendido es "escena". Mientras que Tasker no permita programar con lógica difusa será necesario que concretes un poco más...

rastrear = eso suena a un bucle exactamente igual que el de las demos

una o dos veces al día = eso suena a un perfil que lance la tarea

valores = ¿qué valores? ¿variables de las que genera al JS?

anormales = ¿más alto o más bajo de qué? ... números concretos

Sigues sin pensar como un programador, y así vamos mal.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
Responder Con Cita
  #7  
Viejo 07/11/17, 19:36:49
Array

[xs_avatar]
Mitrhandir Mitrhandir no está en línea
Usuario muy activo
 
Fecha de registro: ene 2014
Localización: Burrifornia
Mensajes: 910
Modelo de smartphone: Huawei Ascend G7
Tu operador: Yoigo
Ya doy por hecho que nunca pensaré como tal. Nunca tendré ese don de pensar como un programador.

Tengo que tranquilizarme y respirar hondo. Máxime cuando encima estoy de vacaciones. Esta noche trataré de sacar los valores que me interesan y establecerlos en una variable %texto y que salga en un escena.

Estoy confuso, pero trataré de poner orden.
__________________
Si la educación te parece cara, prueba con la ignorancia.
Responder Con Cita
  #8  
Viejo 08/11/17, 14:31:25
Array

[xs_avatar]
Mitrhandir Mitrhandir no está en línea
Usuario muy activo
 
Fecha de registro: ene 2014
Localización: Burrifornia
Mensajes: 910
Modelo de smartphone: Huawei Ascend G7
Tu operador: Yoigo
Buenas!

A ver, con esta tarea tengo todos los datos, pero no soy/no me veo capaz de sacar esos valores anormales que ando buscando. En la zona en la que yo vivo, considero que hace frío si la temperatura baja de 10 grados y hace calor si sube de 35.

¿Cómo le digo eso a Tasker? Yo busco que Tasker "lance" un pop-up, escena, notificación,etc... de que mañana (por ejemplo) habrá cualquier temperatura superior a 36 o inferior a 10. Lo mismo con la lluvia, etc... Es más que nada, para no estar mirando cada 2 por 3 el tlf.

Te pido disculpas por adelantado por mi ignorancia!

Un saludo!
__________________
Si la educación te parece cara, prueba con la ignorancia.
Responder Con Cita
  #9  
Viejo 08/11/17, 17:10:48
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
A ver, con esta tarea tengo todos los datos...
¿Con qué tarea?

Anda majo, que pareces nuevo. Pon la descripción para que la veamos todos.

http://www.htcmania.com/showthread.php?t=615896

Y no te olvides de las etiquetas [code].

 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
... considero que hace frío si la temperatura baja de 10 grados y hace calor si sube de 35 ... ¿Cómo le digo eso a Tasker?
Con una condición IF. Cuando publiques la descripción de "esa" tarea te digo el sitio exacto en el que ponerla.

 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
Yo busco que Tasker "lance" un pop-up, escena, notificación, etc...
No, si lo que quieres lo tengo claro. Pero no pienso decirte cómo lo tienes que hacer. A estas alturas ya no.

 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
Te pido disculpas por adelantado por mi ignorancia!
Estás disculpado. Y no es malo no saber. Lo malo es no querer saber.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
Responder Con Cita
  #10  
Viejo 08/11/17, 18:16:45
Array

[xs_avatar]
danko9696 danko9696 no está en línea
Usuario muy activo
 
Fecha de registro: ago 2012
Mensajes: 2,371
Modelo de smartphone: Mate 8
Tu operador: Yoigo
Buena currada, yo creo que te has recorrido los siete mares y has traido cien toneladas de los peces más grandes XDD

 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Las tareas de prueba son algo lentas, sobre todo la que devuelve arrays ... ¿qué pasa?
Ante este comentario, y dado que estuve un buen tiempo optimizando varios de mis scriptlets y dándole vueltas al asunto me ha dado por probar a ver qué mejora se podría sacar de comprimir el código. Como dices, en este caso no creo que sea muy importante el rendimiento, porque no es algo que vayas a hacer de forma repetida sino aisladamente muy de cuando en cuando pero tenía curiosidad por ver el comportamiento comprimiendo el código y me he llevado una sorpresa.

Ni el compresor que uso habitualmente ni varios otros que he probado funcionan con el código. Pero sí he encontrado uno que sí (y ahí viene la mayor sorpresa) la diferencia de rendimiento entre ambas versiones es nula. Pero no solo es nula, es que realmente es casi totalmente nula, tanto de una ejecución a otra (la diferencia ronda los 5 ms en un tiempo de 1024ms de media) con la misma acción (solo el scriptlet, no la tarea entera) y también sin suponer diferencia alguna entre el comprimido y el original, lo que más me choca. Como referencia uno de mis scriptlets mejora espectacularmente el tiempo de ejecución e incluso la misma tarea repetidas veces puede oscilar unos 100ms (50 arriba / 50 abajo) de una ejecución a otra para una duración media de 600ms, con resultados equivalentes según longitud del código para otros scripts.

La verdad, no me lo explico.
Responder Con Cita
Los siguientes 2 usuarios han agradecido a danko9696 su comentario:
  #11  
Viejo 08/11/17, 18:21:25
Array

[xs_avatar]
Mitrhandir Mitrhandir no está en línea
Usuario muy activo
 
Fecha de registro: ene 2014
Localización: Burrifornia
Mensajes: 910
Modelo de smartphone: Huawei Ascend G7
Tu operador: Yoigo
0ValoresAnormalesDeAEMET (70)
<código INE de Burriana>
A1: Establecer variable [ Nombre:%par1 A:12032 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %EstoyEn ~ Casa ]
<código INE de Moncófar>
A2: Establecer variable [ Nombre:%par1 A:12077 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %EstoyEn ~ Kerabén ]
<código INE de Vilareal>
A3: Establecer variable [ Nombre:%par1 A:12135 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %EstoyEn ~ Vilareal ]
<código INE de Alcublas>
A4: Establecer variable [ Nombre:%par1 A:46018 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %EstoyEn ~ Alcublas ]
<xml 7 días>
A5: HTTP Get [ Servidor:Puerto:http://www.aemet.es Ruta:xml/municipios/localidad_%par1.xml Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime: Archivo de salida:/sdcard/aemet.xml Confiar en cualquier Certificado:Apagado ]
<xml aemet arrays tasker>
A6: JavaScript [ Ruta:/sdcard/aemet_arr.js Librerías: Salida Automática:Encendido Cuenta atrás (segundos):5 ]
<aemet_xxx y datos generales>
A7: Escribir archivo [ Archivo:/sdcard/aemet.txt Texto:___
_ PARÁMETROS

aemet_xml = %aemet_xml
aemet_dedias = %aemet_dedias
aemet_dehoras = %aemet_dehoras
aemet_endias = %aemet_endias
aemet_enhoras = %aemet_enhoras
aemet_perhora = %aemet_perhora
aemet_perrango = %aemet_perrango
___
_ DATOS GENERALES

Enlace:
%enlace

Elaborado:
%elaborado

Municipio:
%nombre

Provincia:
%provincia Añadir:Apagado Añadir Nueva Línea:Encendido ]
<máximos/mínimos 7 días>
A8: Escribir archivo [ Archivo:/sdcard/aemet.txt Texto:___
_ 7 DÍAS / MÁXIMOS Y MÍNIMOS (%diapred(#))

Probabilidad de lluvia:
A: %problluvia_ab1 = %problluvia(%problluvia_ab1) el %diapred(%problluvia_ab1) de %perpred(%problluvia_ab1)
B: %problluvia_ab2 = %problluvia(%problluvia_ab2) el %diapred(%problluvia_ab2) de %perpred(%problluvia_ab2)

Cota de nieve:
A: %cotanieve_ab1 = %cotanieve(%cotanieve_ab1) el %diapred(%cotanieve_ab1) de %perpred(%cotanieve_ab1)
B: %cotanieve_ab2 = %cotanieve(%cotanieve_ab2) el %diapred(%cotanieve_ab2) de %perpred(%cotanieve_ab2)

Velocidad del viento:
A: %velviento_ab1 = %velviento(%velviento_ab1) el %diapred(%velviento_ab1) de %perpred(%velviento_ab1)
B: %velviento_ab2 = %velviento(%velviento_ab2) el %diapred(%velviento_ab2) de %perpred(%velviento_ab2)

Racha máxima:
A: %rachamax_ab1 = %rachamax(%rachamax_ab1) el %diapred(%rachamax_ab1) de %perpred(%rachamax_ab1)
B: %rachamax_ab2 = %rachamax(%rachamax_ab2) el %diapred(%rachamax_ab2) de %perpred(%rachamax_ab2)

Temperatura máxima:
A: %tempmax_ab1 = %tempmax(%tempmax_ab1) el %diapred(%tempmax_ab1) de %perpred(%tempmax_ab1)
B: %tempmax_ab2 = %tempmax(%tempmax_ab2) el %diapred(%tempmax_ab2) de %perpred(%tempmax_ab2)

Temperatura mínima:
A: %tempmin_ab1 = %tempmin(%tempmin_ab1) el %diapred(%tempmin_ab1) de %perpred(%tempmin_ab1)
B: %tempmin_ab2 = %tempmin(%tempmin_ab2) el %diapred(%tempmin_ab2) de %perpred(%tempmin_ab2)

Sensación térmica máxima:
A: %sentermax_ab1 = %sentermax(%sentermax_ab1) el %diapred(%sentermax_ab1) de %perpred(%sentermax_ab1)
B: %sentermax_ab2 = %sentermax(%sentermax_ab2) el %diapred(%sentermax_ab2) de %perpred(%sentermax_ab2)

Sensación térmica mínima:
A: %sentermin_ab1 = %sentermin(%sentermin_ab1) el %diapred(%sentermin_ab1) de %perpred(%sentermin_ab1)
B: %sentermin_ab2 = %sentermin(%sentermin_ab2) el %diapred(%sentermin_ab2) de %perpred(%sentermin_ab2)

Humedad relativa máxima:
A: %hummax_ab1 = %hummax(%hummax_ab1) el %diapred(%hummax_ab1) de %perpred(%hummax_ab1)
B: %hummax_ab2 = %hummax(%hummax_ab2) el %diapred(%hummax_ab2) de %perpred(%hummax_ab2)

Humedad relativa mínima:
A: %hummin_ab1 = %hummin(%hummin_ab1) el %diapred(%hummin_ab1) de %perpred(%hummin_ab1)
B: %hummin_ab2 = %hummin(%hummin_ab2) el %diapred(%hummin_ab2) de %perpred(%hummin_ab2)

Índice UV máximo:
A: %uvmax_ab1 = %uvmax(%uvmax_ab1) el %diapred(%uvmax_ab1) de %perpred(%uvmax_ab1)
B: %uvmax_ab2 = %uv

Mi tarea. Creo que lo he hecho bien, pero me falta sacar los valores que antes he comentado.

Ésa es mi carta a los Reyes Magos
__________________
Si la educación te parece cara, prueba con la ignorancia.
Responder Con Cita
  #12  
Viejo 08/11/17, 18:47:41
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por danko9696 Ver Mensaje
Buena currada, yo creo que te has recorrido los siete mares y has traido cien toneladas de los peces más grandes XDD
tampoco es para tanto ... cinco tardes mientras no hacía ni caso a la tele.

 Cita: Originalmente Escrito por danko9696 Ver Mensaje
... tenía curiosidad por ver el comportamiento comprimiendo el código y me he llevado una sorpresa ... la diferencia de rendimiento entre ambas versiones es nula.
Naturalmente.

 Cita: Originalmente Escrito por danko9696 Ver Mensaje
La verdad, no me lo explico.
Pues ya te lo había dicho. He programado mucho en JS y lo escribo/optimizo al vuelo.

Te agradezco el tiempo de comprobar el rendimiento del script. La verdad es que no me he preocupado mucho de ese aspecto, aunque me consta que uno de los procesos es mejorable (un bucle al que podría arañar unos pocos ms), pero lo he dejado así porque es más fácil de leer/entender.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
Responder Con Cita
Gracias de parte de:
  #13  
Viejo 08/11/17, 19:01:59
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
Ésa es mi carta a los Reyes Magos
Pues ya queda menos para enero. Estoy deseando ver qué te traen.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
Responder Con Cita
  #14  
Viejo 08/11/17, 21:24:19
Array

[xs_avatar]
Mitrhandir Mitrhandir no está en línea
Usuario muy activo
 
Fecha de registro: ene 2014
Localización: Burrifornia
Mensajes: 910
Modelo de smartphone: Huawei Ascend G7
Tu operador: Yoigo


Código:
0Valores anormales de AEMET (7d) (72)
	<código INE del municipio>
	A1: Establecer variable [ Nombre:%par1 A:12032 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] 
	<xml 7 días>
	A2: HTTP Get [ Servidor:Puerto:http://www.aemet.es Ruta:xml/municipios/localidad_%par1.xml Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime: Archivo de salida:/sdcard/aemet.xml Confiar en cualquier Certificado:Apagado ] 
	<xml-aemet >> arrays-tasker>
	A3: JavaScript [ Ruta:/sdcard/aemet_arr.js Librerías: Salida Automática:Encendido Cuenta atrás (segundos):5 ] 
	<aemet_xxx y datos generales>
	A4: Escribir archivo [ Archivo:/sdcard/aemet.txt Texto:___
_ PARÁMETROS

aemet_dedias = %aemet_dedias
aemet_dehoras = %aemet_dehoras
___
_ DATOS GENERALES

Elaborado:
 %elaborado

Municipio:
 %nombre

Provincia:
 %provincia Añadir:Apagado Añadir Nueva Línea:Encendido ] 
	<máximos/mínimos 7 días>
	A5: Escribir archivo [ Archivo:/sdcard/aemet.txt Texto:___
_ 7 DÍAS / MÁXIMOS Y MÍNIMOS (%diapred(#))

Temperatura máxima:
 A: %tempmax_ab1 = %tempmax(%tempmax_ab1) el %diapred(%tempmax_ab1) de %perpred(%tempmax_ab1)
 B: %tempmax_ab2 = %tempmax(%tempmax_ab2) el %diapred(%tempmax_ab2) de %perpred(%tempmax_ab2)

Temperatura mínima:
 A: %tempmin_ab1 = %tempmin(%tempmin_ab1) el %diapred(%tempmin_ab1) de %perpred(%tempmin_ab1)
 B: %tempmin_ab2 = %tempmin(%tempmin_ab2) el %diapred(%tempmin_ab2) de %perpred(%tempmin_ab2) Añadir:Encendido Añadir Nueva Línea:Encendido ] 
	A6: For [ Variable:%ind Ítems:1:%diapred(#) ] 
	<datos predicción 7 días>
	A7: Escribir archivo [ Archivo:/sdcard/aemet.txt Texto:___
_ 7 DÍAS / PREDICCIÓN %ind de %diapred(#)

Fecha/Periodo:
 %diapred(%ind) / %perpred(%ind)

Temperatura máxima:
 %tempmax(%ind)

Temperatura mínima:
 %tempmin(%ind) Añadir:Encendido Añadir Nueva Línea:Encendido ] 
	A8: End For 
	<ver txt>
	A9: Abrir archivo [ Archivo:/sdcard/aemet.txt Tipo Mime:text/plain ]
No sé si ahora lo he hecho bien. Si no lo he hecho bien, decídmelo.

Un saludo
__________________
Si la educación te parece cara, prueba con la ignorancia.

Última edición por Mitrhandir Día 08/11/17 a las 21:26:34.
Responder Con Cita
  #15  
Viejo 08/11/17, 22:47:56
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
No sé si ahora lo he hecho bien. Si no lo he hecho bien, decídmelo.
... me estoy ganando el cielo.

Por lo que veo esa tarea es una versión "aligerada" de la "demo" que devuelve los datos en arrays. Es un buen punto de partida para lo que pretendes porque tiene el esqueleto de lo que necesitas hacer para "rastrear" esos valores "anormales" que tanto te obsesionan.

El secreto está en ese bucle que recorre el array %diapred desde el primer elemento (1) hasta el último (#) asignando en cada vuelta el número del elemento por el que pasa a la variable %ind ... esto es una perogrullada, pero lo aclaro por si las moscas.

Con ese mismo número de elemento (%ind) del array que contiene las fechas (%diapred) se pueden sacar todos los datos de esa predicción en concreto. Es decir, suponiendo que %ind=3 entonces %diapred(%ind) tendrá la fecha de la tercera predicción y %tempmax(%ind) su temperatura máxima.

Simplemente tienes que meter dentro de ese bucle las comprobaciones que quieras hacer con algo así...

SI %tempmax(ind)>35 ENTONCES ...
SI %tempmin(ind)<10 ENTONCES ...

... y cuando el bucle finalice ya tendrás "rastreados" esos valores "anormales" ... la cosa es realmente sencilla, creo yo.

Siguiendo ese principio tan sencillo he "rastreado" UNO de los valores que te interesan. Estudia detenidamente esta tarea...

Código:
RastreaValoresAEMET(7d) (999)
	A1: Establecer variable [ Nombre:%par1 A:12032 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] 
	A2: HTTP Get [ Servidor:Puerto:http://www.aemet.es Ruta:xml/municipios/localidad_%par1.xml Archivo de salida:/sdcard/aemet.xml ] 
	A3: JavaScript [ Ruta:/sdcard/aemet_arr.js Cuenta atrás (segundos):5 ] 
	A4: For [ Variable:%ind Ítems:1:%diapred(#) ] 
	A5: Array Push [ Matriz de Variables (array):%diasc Posición:99 Valor:%diapred(%ind) de %perpred(%ind) ] Si (if) [ %sentermax(%ind) > 35 ]
	A6: Array Push [ Matriz de Variables (array):%diasf Posición:99 Valor:%diapred(%ind) de %perpred(%ind) ] Si (if) [ %sentermin(%ind) < 10 ]
	A7: End For 
	A8: Establecer variable [ Nombre:%diasc A:pasarás calor el/los día/s: %diasc() ] Si (if) [ %diasc(#) > 0 ]
	A9: Establecer variable [ Nombre:%diasc A:no pasarás calor ningún día. ] Si (if) [ %diasc(#) = 0 ]
	A10: Establecer variable [ Nombre:%diasf A:pasarás frío el/los día/s: %diasf() ] Si (if) [ %diasf(#) > 0 ]
	A11: Establecer variable [ Nombre:%diasf A:no pasarás frío ningún día. ] Si (if) [ %diasf(#) = 0 ]
	A12: Escribir archivo [ Archivo:/sdcard/aemet.txt Texto:
De la previsión para %nombre elaborada el %elaborado sacamos que de entre las %diapred(#) predicciones ... La temperatura más alta será de %tempmax(%tempmax_ab1) grados el %diapred(%tempmax_ab1) de %perpred(%tempmax_ab1). Pero %diasc. La temperatura más baja será de %tempmin(%tempmin_ab2) grados el %diapred(%tempmin_ab2) de %perpred(%tempmin_ab2). Pero %diasf.
Añadir:Apagado Añadir Nueva Línea:Encendido ] A13: Abrir archivo [ Archivo:/sdcard/aemet.txt Tipo Mime:text/plain ]
No pretende ser una tarea bonita. No hace nada de lo que tú quieres. Simplemente "rastrea" un dato y le saca casi todo el jugo posible. Con el resto es lo mismo.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)

Última edición por WillyWeb Día 09/11/17 a las 12:15:07. Razón: Error en una variable de A12
Responder Con Cita
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario:
  #16  
Viejo 09/11/17, 00:39:47
Array

[xs_avatar]
danko9696 danko9696 no está en línea
Usuario muy activo
 
Fecha de registro: ago 2012
Mensajes: 2,371
Modelo de smartphone: Mate 8
Tu operador: Yoigo
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Pues ya te lo había dicho. He programado mucho en JS y lo escribo/optimizo al vuelo.
Pero eso no lo aclara nada. Aunque mi código sea bastante mejorable, si exactamente el mismo código, solo que sin saltos de linea ni retornos de carro, produce distintos resultados al original, ¿por qué no en tu caso?. Porque la idea que tenía era que se debía al interprete de Tasker, ya que en lo que hice con DS los tiempos de ejecución tampoco variaban con o sin comprimir (o muy muy poco, no recuerdo bien).
Responder Con Cita
  #17  
Viejo 09/11/17, 08:36:52
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por danko9696 Ver Mensaje
... si exactamente el mismo código, solo que sin saltos de linea ni retornos de carro, produce distintos resultados al original, ¿por qué no en tu caso? ...
... el pacto que tengo con el diablo era para otra cosa, así que no puede ser eso.



Algo que siempre me ha llamado la atención es que el tiempo de ejecución de una misma tarea de Tasker es variable. Supongo que como consecuencia del sistema de prioridades entre perfiles/tareas/acciones.

En mi código sólo uso un par de sentencias/funciones propias del JS de Tasker. Un "global()" justo al principio y un "exit()" en un par de ocasiones. ¿Cuántas funciones JS de Tasker tienes en tu código?
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
Responder Con Cita
  #18  
Viejo 09/11/17, 10:28:01
Array

[xs_avatar]
Mitrhandir Mitrhandir no está en línea
Usuario muy activo
 
Fecha de registro: ene 2014
Localización: Burrifornia
Mensajes: 910
Modelo de smartphone: Huawei Ascend G7
Tu operador: Yoigo
Buenos días!

@WillyWeb, no me ha quedado muy clara tu explicación. "Entonces" es "Else" no?

Pero sí, yo creo que cuando la palmes(que sea dentro de mucho), habrá un lugar privilegiado para ti.

Yo como estoy sordo, me pondrán en la ventanilla de reclamaciones, pero del infierno!

Ahora en serio. Voy a ver si puedo hacer lo que me has explicado.

Un saludo!
__________________
Si la educación te parece cara, prueba con la ignorancia.
Responder Con Cita
  #19  
Viejo 09/11/17, 11:03:42
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Mitrhandir Ver Mensaje
... no me ha quedado muy clara tu explicación. "Entonces" es "Else" no?
No. En términos de programación ese tipo de estructuras condicionales tienen la forma...

If ... Then ... Else

Si (IF) se cumple cierta condición (THEN=ENTONCES) haz esto y si no se cumple (ELSE=SI NO) haz esto otro.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

Si das pescado a un hombre hambriento le nutres una jornada. Si le enseñas a pescar le nutrirás toda la vida. (Lao-Tsé - Filósofo chino)
Responder Con Cita
Gracias de parte de:


  #20  
Viejo 09/11/17, 11:53:22
Array

[xs_avatar]
Mitrhandir Mitrhandir no está en línea
Usuario muy activo
 
Fecha de registro: ene 2014
Localización: Burrifornia
Mensajes: 910
Modelo de smartphone: Huawei Ascend G7
Tu operador: Yoigo
Código:
0Anormales (73)
	<código INE del municipio>
	A1: Establecer variable [ Nombre:%par1 A:12032 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] 
	<xml 7 días>
	A2: HTTP Get [ Servidor:Puerto:http://www.aemet.es Ruta:xml/municipios/localidad_%par1.xml Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime: Archivo de salida:/sdcard/aemet.xml Confiar en cualquier Certificado:Apagado ] 
	<xml-aemet >> arrays-tasker>
	A3: JavaScript [ Ruta:/sdcard/aemet_arr.js Librerías: Salida Automática:Encendido Cuenta atrás (segundos):5 ] 
	A4: For [ Variable:%ind Ítems:1:%diapred(#) ] 
	A5: Array Push [ Matriz de Variables (array):%diasc Posición:99 Valor:%diapred Rellenar Espacios:Apagado ] Si (if) [ %sentermax > 35 ]
	A6: Array Push [ Matriz de Variables (array):%diasf Posición:99 Valor:%diapred Rellenar Espacios:Apagado ] Si (if) [ %sentermain > 10 ]
	A7: End For 
	A8: Establecer variable [ Nombre:%diasc A:pasarás calor el/los días: %diasc() Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %diasc(#) > 0 ]
	A9: Establecer variable [ Nombre:%diasc A:no pasarás calor ningún día  Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %diasc(#) = 0 ]
	A10: Establecer variable [ Nombre:%diasf A:pasarás frío el/los días: %diasf() Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %diasf(#) > 0 ]
	A11: Establecer variable [ Nombre:%diasf A:no pasarás frío ningún día  Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %diasf(#) = 0 ]
	A12: Escribir archivo [ Archivo:/sdcard/aemet.txt Texto:De la previsión para %nombre elaborada el %elaborado sacamos que de entre las %diapred(#) predicciones ...

La temperatura más alta será de %tempmax(%sentermax_ab1) grados el %diapred(%tempmax_ab1) de %perpred(%tempmax_ab1).

Pero %diasc.

La temperatura más baja será de %tempmin(%tempmin_ab2) grados el %diapred(%tempmin_ab2) de %perpred(%tempmin_ab2).

Pero %diasf.
Añadir:Apagado Añadir Nueva Línea:Encendido ] 
A13: Abrir archivo [ Archivo:/sdcard/aemet.txt Tipo Mime:text/plain ] Añadir:Apagado Añadir Nueva Línea:Encendido ] 
	A13: [x] Mostrar Escena [ Nombre:Meteo Mostrar como:Diálogo con fondo oscurecido Posición Horizontal:100 Posición Vertical:100 Animación:Sistema Mostrar Botón Salida:Encendido Mostrar sobre bloqueo pantalla:Encendido Continuar tarea inmediatamente:Encendido ] 
	<ver txt>
	A14: [x] Abrir archivo [ Archivo:/sdcard/aemet.txt Tipo Mime:text/plain ]
Buenas! A3 me está dando error. He hecho la tarea tal y como me has dicho.
__________________
Si la educación te parece cara, prueba con la ignorancia.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Otro software para Android > Tasker



Hora actual: 20:09:39 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /