Ver la Versión Completa : [ CONSULTA ] Cómo hacer una tarea para saber el tiempo que hace o va a hacer
Mitrhandir
20/02/17, 10:30:46
Buenas! El otro día el usuario Roberto_torres me pasó una tarea que te dice la temperatura, si hay nubes, la presión atmosférica... Pero yo así no aprendo porque no entiendo el proceso. Así que me gustaría empezar de 0 y que alguien "caritativo" me ayude a construir esta tarea y de paso, aprenden los demás.
Sé que puede ser mediante una web (HTTPD GET creo) o mediante una app con intents.
Creo que es una tarea muy chula, con permiso de Alfahuir, que en su día hizo una muy chula. Pero de eso hace 4 años y siempre va bien repasar/actualizar.
Algún voluntario? :risitas:
Un saludo!
shakur_e69
20/02/17, 10:56:38
yo tengo pensado rehacer una que hice hace tiempo con la API de openweather, pero esta vez voy a usar WeatherUnderground que es la app que llevo en el movil.
Caravantes
20/02/17, 12:17:07
Cómo hacer una tarea para saber el tiempo que hace o va a hacer
Yo creo que a la hora de plantear un proyecto de este tipo es conveniente hacerlo en tres fases que yo denomino así:
1 Preproducción. Es el plan de lo que queremos hacer y cómo queremos hacerlo.
2 Producción. Hacemos la tarea Tasker mediante acciones concretas.
3 Postproducción. Una vez terminada la tarea: pruebas, corrección de errores, posibles mejoras, etc.
Así pues vamos a comenzar por la preproducción. Hay que empezar trazando un plan, aunque sea aproximado y susceptible de que luego se modifiquen más o menos detalles:
- En primer lugar hay que pensar qué información se desea obtener o presentar: ¿Temperaturas? ¿Mínimas y máximas? ¿Vientos? ¿En Kms por hora? ¿En horas de viento? ¿Nubes? ¿Nivel de insolación?...
- Cómo se va a presentar esa información: ¿texto, infografía, gráfico? ¿Se va a guardar en algún archivo? ¿Se va a mostrar por pantalla? ¿Se espera que Android vocalice eso, mediante la acción DECIR?
- De dónde se va a obtener esa información: ¿sitio web? ¿app instalada? ¿otro? ¿como se puede obtener la información (método de comunicación/recepción)?
- La información obtenida es relativa a un lugar y a un momento. ¿Lugar prefijado en el que vivo? ¿Lugar en donde se encuentre el dispositivo, utilizando ubicación cada vez? ¿Quiero obtener la previsión global semanal? ¿diaria, o de otro rango temporal? ¿Quiero obtener cada día tres previsiones (para mañana/tarde/noche)? ¿más previsiones? ¿menos?
Una vez que se han concretado (al menos un poco) estos detalles, conviene hacer un esquema o diagrama de flujo de cómo va a funcionar la tarea, en líneas generales. Luego (fase de producción) se concretará cómo hacer la tarea mediante acciones concretas, pero en esta fase de pre-producción nos conviene concretar las líneas generales de la tarea y las secuencias principales del proceso.
Al mismo tiempo, yo trataría de estudiar otras tareas similares que ya puedan existir, para ver cómo han enfocado todo lo dicho anteriormente, y ver si esas tareas tienen algún fragmento o idea aprovechable para este proyecto. Quizá sí, quizá no.
Mitrhandir, si te parece, empiezas a currar en todos estos asuntos. Ve informando aquí de tus progresos, explicando por qué tomas tales o cuales decisiones, y preguntando las dudas o las cosas que desconozcas respecto a los detalles. Si tomas alguna decisión que nos parezca poco acertada, te lo diremos.
Mitrhandir
20/02/17, 13:20:21
Caravantes, eres un crack! Estoy en ello, pero primero quiero tener claro lo que quiero, porque estoy descubriendo un mundo nuevo con esto.
Dame un ratito y lo expongo.
Un saludo!
danko9696
20/02/17, 16:05:33
Si lo que quieres es mostrarlo visualmente y no mediante voz yo creo que es bastante mejor usar alguna app de widgets.
http://www.htcmania.com/showpost.php?p=23922636&postcount=62
http://www.htcmania.com/showpost.php?p=23922690&postcount=63
Más sencillo y cómodo, siempre que no pidas valores como presión atmosférica (el cual indirectamente viene incluido en la predicción del tiempo), radiación ultravioleta o polen, aunque sí humedad y velocidad/dirección del viento. Y en los casos que no viene una función para ello también es posible, dado que igualmente es posible usar análogos al HTTPGET de Tasker (o bien usar este y pasar los datos como variables externas).
Mitrhandir
20/02/17, 17:12:41
A ver, todo esto viene del grupo de Telegram de Tasker. Que literalmente los estoy volviendo locos :risitas:
Llevo una vida sencilla pero muchas veces ocurre que me voy a trabajar y como vivo tan feliz, pues le da por llover y eso me crea un problema, puesto que por mi sordera, llevo unos audífonos carísimos que no se pueden mojar bajo ningún concepto. De ahí viene esa tarea que quiero hacer.
Entonces, por las mañanas o por las noches me da igual, me gustaría que Conchita (TTS) me dijera la temperatura, velocidad del viento y la previsión del tiempo. O que si, va a llover en las próximas horas, que lo diga.
El método que se está hablando en el grupo de Telegram, es con http GET y está bastante avanzado, aunque si lo preferís, puede también intents mediante. Estoy abierto.
Y por último, lo ideal sería que la tarea localice dónde está el dispositivo (%LOC).
Quizás os de la sensación de que estoy jugando a 2 bandas, pero creo que es de justicia que los que realmente saben y me ayudan deben de llevarse todas las medallas y de paso, que los usuarios que nos visitan puedan hacer lo mismo que yo, paso a paso.
Un saludo!
cace0353
20/02/17, 20:52:12
La localización que se guarda en %LOC es la obtenida por satélites (por GPS). Tarda bastante tiempo en situarte y, sobretodo, debes estar en un lugar desde el que se pueda ver el cielo…
Para obtener tu posición para conseguir la información meteorológica (actual o prevista) deberías utilizar la ubicación por antenas cercanas, %LOCN. És mucho más rápida (1 ó 2 segundos) y suficientemente precisa para tú propósito (entre 20 y 60 m.)
Enviat des del meu Nexus 5 usant Tapatalk
Caravantes
20/02/17, 21:31:46
Quizás os de la sensación de que estoy jugando a 2 bandas,
Creo que eso no debería de ser un problema. Está muy bien que enriquezcas tu proyecto mediante sugerencias o aportaciones de tus compañeros de Telegram, pero aporta aquí en el foro la información de lo que vas decidiendo y por qué tomas esas decisiones, cuáles alternativas descartas, etc. Así aprendemos todos.
El método que se está hablando en el grupo de Telegram, es con http GET y está bastante avanzado, aunque si lo preferís, puede también intents mediante. Estoy abierto.
Creo que debes ser tú quien tome esas decisiones, en función de lo complicado o difícil que resulte cada método, y en función del tipo de información que puedas obtener por una u otra vía. Sigue avanzando y cada poco le das un repaso a mi primer post para ver si vas teniendo respuestas a todas las cuestiones que he planteado como preproducción. Y nos vas contando.
danko9696
21/02/17, 15:46:40
Llevo una vida sencilla pero muchas veces ocurre que me voy a trabajar y como vivo tan feliz, pues le da por llover y eso me crea un problema, puesto que por mi sordera, llevo unos audífonos carísimos que no se pueden mojar bajo ningún concepto. De ahí viene esa tarea que quiero hacer.
Disculpa por insistir pero la verdad creo que te complicas demasiado. Por decir uno gratuito lo que quieres lo tienes en menos de cinco minutos con la versión gratuita de Zooper (que sí tiene presión atmosférica, aunque no la veo mucha utilidad) y uno de los presets por defecto, sin tener que buscar nada. No creo que sea más práctico la predicción del tiempo por voz (en cualquier caso disponible con google now) que a la vista siempre que enciendas el móvil, pudiendo añadir más campos, sea con datos internos o enviados desde Tasker, y modificar su aspecto eligiendo entre miles de skins.
He tenido un problema parecido, necesitando saber si es probable que llueva o no, para llevar puesto equipamiento de lluvia al coger la moto. Pero si como yo, no necesitas predicción de un proveedor del tiempo muy específico (como puede ser el caso para alpinismo, por ejemplo), no veo mucho sentido usar Tasker para ello.
Mitrhandir
21/02/17, 17:18:24
cace0353 justamente lo de la localización me está llevando de cabeza. Sí es por red de datos, se queda como "enganchado" a la última ubicación. Tengo que tirar de GPS que sí funciona.
Caravantes, creo que ya he contestado a tus preguntas, pero tú quieres algo más concreto. Bien.
Por las mañanas o por las noches me da igual, me gustaría que Conchita (TTS) me dijera la temperatura, velocidad del viento y la previsión del tiempo del lugar donde estoy en 3/5 horas.
Quiero hacerlo con http GET, porque es más versátil.
Ahora quiero solucionar lo de %LOC
danko9696 sé que
existen esas apps, pero los caminos más difíciles son los que más satisfacciones me dan. Es un aprendizaje!
Un saludo!
cace0353
21/02/17, 17:29:28
Editado: Te transcribo 2 posts más abajo la última revisión de la tarea que se puede ejecutar sin Root ya que usa la acción SQL query embebida en la última versión de Tasker...
Disculpa por insistir pero la verdad creo que te complicas demasiado. Por decir uno gratuito lo que quieres lo tienes en menos de cinco minutos con la versión gratuita de Zooper (que sí tiene presión atmosférica, aunque no la veo mucha utilidad) y uno de los presets por defecto, sin tener que buscar nada. No creo que sea más práctico la predicción del tiempo por voz (en cualquier caso disponible con google now) que a la vista siempre que enciendas el móvil, pudiendo añadir más campos, sea con datos internos o enviados desde Tasker, y modificar su aspecto eligiendo entre miles de skins.
He tenido un problema parecido, necesitando saber si es probable que llueva o no, para llevar puesto equipamiento de lluvia al coger la moto. Pero si como yo, no necesitas predicción de un proveedor del tiempo muy específico (como puede ser el caso para alpinismo, por ejemplo), no veo mucho sentido usar Tasker para ello.
+1
Yo soy un "adicto" a mirar el tiempo antes por la bici y ahora por la moto y mis widgets (con kwgt similar a zooper) en el móvil son para saber el tiempo actual y con avisos visuales si mañana me va a helar, si va hacer mucho viento o llover. Es mas como aerotrastornado tengo otro widget con el Metar y el TAFOR (informes de tiempo y predicción en aeronáutica).
Con esto ya tengo una idea del tiempo que me va a hacer pero para afinar utilizo las app eweather con pronósticos por horas indicando cantidad de lluvia y probabilidad y ya para afinar app rain alarm o alarma de lluvia con la que se ve la evolución de las nubes y la cantidad de agua que llevan estas y tienes la posibilidad de tener notificaciones en base a una circunferencia de X km alrededor de donde estés. Al final la interpretación de esta última app es la que me "indica si me voy a mojar o no".
Dicho esto como proyecto es muy interesante y te animo a seguir ya que aprenderás a obtener los datos de pagina webs.
975076
Mi pantalla principal. Todos los elementos están dispuestos por mi con kwgt.
DE izquierda a derecha en relación al tiempo: 15 temperatura actual (sale también el máximo), icono de tiempo actual. A la derecha rosa de los vientos con un avión indicando la dirección del viento y debajo (10) velocidad de este. El 30 marca la pista actual activa en el aeropuerto determinada por la dirección del viento (aerotrastornado). DEbajo temperatura max y mini de mañana y icono del tiempo. En un lateral que no sale están las alertas ya habladas no visibles si no las hay y visibles y en rojo si las hay. Y lo que queda es el otro widget que aparece cuando le doy a un acceso directo que me mostraria el METAR o en este caso el TAF, Cuya predicción es:
LEZG (aeropuerto de Zaragoza) El 21 a las 11:00 Zulú válido desde el día 21 a las 12.00Z hasta el día 22 a las 12.00Z viento con dirección 280º 9Knts (16km/h +-), visibilidad 10000m, nubes escasas a 5000 pies, temperatura max el día 21 a las 14.00Z y temp mínima 4 el día 22 a las 07.00Z
Había dicho que soy un aerotrastornado, no? :risitas:
cace0353
21/02/17, 17:44:23
Hola @Mitrhandir (http://www.htcmania.com/member.php?u=1175145),
Te cuelgo la última versión que tengo y que utiliza Sqlite embebido (la acción SQL Query) :
Meteo (136)
A1: Obtener ubicación [ Origen:Red datos Cuenta atrás (segundos):20 Continuar tarea inmediatamente:Encendido Mantener Seguimiento:Apagado ]
A2: Establecer variable [ Nombre:%space A: Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A3: Establecer variable [ Nombre:%newline A:
Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A4: Establecer variable [ Nombre:%avui A:%DATE Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%hora A:%TIME Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Separar variable [ Nombre:%hora Separador:. Eliminar base:Apagado ]
A7: Establecer variable [ Nombre:%hora A:%hora1:%hora2 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A8: Separar variable [ Nombre:%avui Separador:- Eliminar base:Apagado ]
A9: Establecer variable [ Nombre:%avui1 A:0%avui1 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %avui1 < 10 ]
A10: Establecer variable [ Nombre:%avui2 A:0%avui2 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %avui2 < 10 ]
A11: Establecer variable [ Nombre:%avui A:20%avui3-%avui2-%avui1 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
<Cercar adreça del lloc a Google…>
A12: Anchor
A13: HTTP Get [ Servidor:Puerto:maps.google.com/maps/api/geocode/xml?sensor=true&latlng=%LOCN Ruta: Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime:text/xml Archivo de salida: Confiar en cualquier Certificado:Apagado ]
A14: Establecer variable [ Nombre:%info A:%HTTPD Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A15: Separar variable [ Nombre:%info Separador:<type>postal_code</type> Eliminar base:Apagado ]
A16: Separar variable [ Nombre:%info1 Separador:<type>political</type> Eliminar base:Apagado ]
A17: Separar variable [ Nombre:%info15 Separador:</long_name> Eliminar base:Apagado ]
A18: Separar variable [ Nombre:%info151 Separador:<long_name> Eliminar base:Apagado ]
A19: Establecer variable [ Nombre:%codi_postal A:%info1512 Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ]
A20: SQL Query [ Modo:Formatted Archivo:Tasker/CODIS_METEO.db Table:CODIS Columns:CODI Consulta:POSTAL = %codi_postal Selection Parameters: Order By: Output Column Divider: Matriz de Variables (array):%codi_ine Usar Root:Apagado ]
A21: Establecer variable [ Nombre:%codi_ine A:%codi_ine(1) Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A22: Establecer variable [ Nombre:%codi_ine A:0%codi_ine Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %codi_ine < 10000 ]
<Obtenir dades meteo>
A23: Anchor
A24: HTTP Get [ Servidor:Puerto:www.aemet.es/xml/municipios/localidad_%codi_ine.xml (http://www.aemet.es/xml/municipios/localidad_%codi_ine.xml) Ruta: Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime:text/xml Archivo de salida: Confiar en cualquier Certificado:Apagado Continuar Tarea Tras Error:Encendido ]
A25: Establecer variable [ Nombre:%result A:%HTTPD Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A26: Separar variable [ Nombre:%result Separador:<prediccion> Eliminar base:Apagado ]
A27: Separar variable [ Nombre:%result1 Separador:</nombre> Eliminar base:Apagado ]
A28: Separar variable [ Nombre:%result11 Separador:<nombre> Eliminar base:Apagado ]
A29: Establecer variable [ Nombre:%municipi A:%result112 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A30: Si (if) [ %dema ~ %* ]
A31: Separar variable [ Nombre:%result2 Separador:<dia fecha="%avui"> Eliminar base:Apagado ]
A32: Else
A33: Separar variable [ Nombre:%result2 Separador:</dia> Eliminar base:Apagado ]
A34: Fin si (End if)
…
A partir de aquí haces la extracción de datos personalizada que quieras (hay varias en el foro)
Adjunto también el link a la BD CODIS_METEO que debes copiar en tu carpeta Tasker:
https://www.dropbox.com/s/x3at8yzvc84rk0i/CODIS_METEO.db?dl=0
PD en A30 hay una novedad: si establezco, antes de ejecutar la tarea desde un boton de una escena, la variable %dema a 1 la tarea hace la extracción de la previsión para mañana (corta la variable result2 a partir del final de la previsión para hoy en </dia> para obtener los datos a partir de este punto...) Esto permite establecer un commutador para que cada pulsación del botón alterna entre la previsión para hoy y para mañana.
Enviat des del meu Nexus 5 usant Tapatalk
Mitrhandir
21/02/17, 21:17:34
Xcso, mae mía, pero chico! Tú trabajas en la NASA o algo? :risitas: Te agradezco mucho tu aporte!
cace0353, sólo te puedo decir: buf!
Ya me veo tropecientos mil mensajes eh, WillyWeb? Que estás muy calladito y no sé si es bueno o malo! :risitas:
Vamos a hacer una cosa (si os parece bien). Cojo como base la tarea de cace y voy haciendo y resolviendo dudas sobre la marcha. Qué te parece Caravantes?
Esto va a estar muy entretenido!
:cucu:
danko9696
21/02/17, 22:43:15
Yo soy un "adicto" a mirar el tiempo antes por la bici y ahora por la moto y mis widgets (con kwgt similar a zooper) en el móvil son para saber el tiempo actual y con avisos visuales si mañana me va a helar, si va hacer mucho viento o llover. Es mas como aerotrastornado tengo otro widget con el Metar y el TAFOR (informes de tiempo y predicción en aeronáutica).
Yo mismo uso klwp (echa un vistazo a los enlaces que puse antes), antes dije Zooper porque tiene versión gratuita con unos cuantos presets más que funcionales para este caso. De hecho, de hacer algo parecido para mostrar datos de una web en pantalla lo haría todo con klwp siempre que sea posible, ya que también dispone de herramientas para ello, va a ser más rápido y eficiente, y con posibilidad de añadir gráficos y/o mapas descargados de webs, quizás superpuestos a un mapa de google maps con colores personalizados para que cuadren con mis temas y que podría ocultar con animaciones mientras no lo necesito, dejando solo la predicción básica.
WillyWeb
21/02/17, 23:34:21
Ya me veo tropecientos mil mensajes eh, WillyWeb? Que estás muy calladito y no sé si es bueno o malo! :risitas:
Es que los ATaskREADOS me tienen ocupado en un par de historias en las que estamos trabajando, pero tú tranquilo que yo lo veo todo. :palomitas:
Sólo unos apuntes...
-Los consejos de Caravantes son oro puro para atacar cualquier proyecto.
-La tarea de cace es un buen punto de partido.
-Para extraer información de un archivo de texto (como los HTML y XML) mejor que la técnica de "separar variable" es usar RegExp. Más limpio y elegante.
-Aunque AEMET (que es la agencia que ha usado cace) proporciona una buena predicción del tiempo yo la evitaría. Para sacar la información del sitio en el que te encuentras necesitas saber el código de esa zona y eso te complica un poco la vida. El HTTPGet al API de Maps y la consulta SQL son precisamente para hacer la conversión de "código postal" de tu localización al "código de zona" que requiere AEMET. Yo usaría un sitio que te proporcionase la predicción a partir de unas simples coordenadas (como las de %LOCN). Y si lo hace mediante un API y en XML mucho mejor.
Esto va a estar muy entretenido!
No lo dudes. :cucu:
Caravantes
22/02/17, 02:00:23
Cojo como base la tarea de cace y voy haciendo y resolviendo dudas sobre la marcha. Qué te parece @Caravantes?
Es un cambio radical y personalmente me agrada menos, pero entiendo tus motivos.
Yo te había dicho: Hazte un proyecto y revisa las tareas existentes para ver si (de alguna de ellas) puedes aprovechar algo concreto que encaje con tu proyecto. Ahora me parece que... cogiendo de base la tarea de Cace, tu proyecto desaparece como tal: casi todas las ideas iniciales del proyecto, que habías comenzado a investigar... ahora quedarán bastante olvidadas y/o relegadas por ese cambio de planteamiento. De hecho el título del hilo también queda un poco obsoleto. Ya no se trata de "Cómo (aprender) a hacer una tarea...", sino de "Cómo cojo una tarea existente y la adapto", con menos esfuerzo -evidentemente-.
Currarte el proyecto desde el principio (y desde cero, o casi) implicaría tomar un buen puñado de decisiones y valoraciones interesantes. Una de ellas (que yo esperaba con interés) es la que ha comentado Willy:
Aunque AEMET (que es la agencia que ha usado cace) proporciona una buena predicción del tiempo yo la evitaría. Para sacar la información del sitio en el que te encuentras necesitas saber el código de esa zona y eso te complica un poco la vida. El HTTPGet al API de Maps y la consulta SQL son precisamente para hacer la conversión de "código postal" de tu localización al "código de zona" que requiere AEMET. Yo usaría un sitio que te proporcionase la predicción a partir de unas simples coordenadas (como las de %LOCN). Y si lo hace mediante un API y en XML mucho mejor.
Conozco bien ese asunto porque yo hice una tarea que predice el tiempo y tuve que tragarme ese problema que cita Willy con los códigos postales-códigos AEMET. En aquella época no encontré otra opción mejor, pero hoy hay más fuentes de datos, así que trataría de evitarlo.
Mitrhandir: si te enganchas a la tarea de Cace, estás "saltándote" varias cuestiones de este tipo, que implican una investigación y una valoración y una decisión. También te vas a ahorrar mucho trabajo en las fases de producción (codificación de la tarea) y de postproducción, porque te ahorras incluso la corrección de errores, que Cace ya ha hecho. Evidentemente, ahorras mucho tiempo partiendo de la tarea de Cace, pero aprendes menos.
Yo también tengo moto y la uso para ir al trabajo. He descargado una app que miro cada día, para saber si va a hacer mal tiempo y en ese caso prefiero ir en coche. Es el sistema perfecto para ahorrar tiempo, con el inconveniente de que no se aprende nada, ni de Tasker ni de otras cosas.
Bueno, partir de otra tarea tampoco está mal. Seguro que aprendemos algo. Espero que al final hagas un post del tipo "Ventajas e inconvenientes de comenzar partiendo de una tarea hecha por otra persona". X-D
Mitrhandir
22/02/17, 05:38:13
Buenos días. Entiendo tu punto de vista y tienes razón. Como dice WillyWeb, tus consejos son oro puro, así que te voy a hacer caso.
Empecemos.
00Scriplet (44)
A1: Secure Settings [ Configuración:GPS Enabled Cuenta atrás (segundos):0 Continuar Tarea Tras Error:Encendido ]
A2: Obtener ubicación [ Origen:GPS Cuenta atrás (segundos):10 Continuar tarea inmediatamente:Apagado Mantener Seguimiento:Apagado Continuar Tarea Tras Error:Encendido ]
A3: Secure Settings [ Configuración:GPS Disabled Cuenta atrás (segundos):0 Continuar Tarea Tras Error:Encendido ]
A4: Establecer variable [ Nombre:%pos A:%LOC Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
Como veréis aquí, para ubicarme tiro de Secure Settings para encender el GPS durante 10 seg y después se apaga. ¿Porqué así? Porque por lo visto, parece ser que entre Moncófar (donde trabajo) y Burriana (donde vivo) no hay muchas antenas. O eso, o no lo hago bien. Tengo que decir que lo tengo todo activo (servicios de Google, ubicación, etc...). Pero que vamos, con el GPS, que como mucho se encenderá (de momento) 2 veces al día, no creo que la batería sufra mucho.
Sí no hay nada que añadir, pasamos al siguiente punto.
:cucu:
Caravantes
22/02/17, 07:45:54
...te voy a hacer caso. Empecemos.
00Scriplet (44)
A1: Secure Settings [ Configuración:GPS Enabled Cuenta atrás (segundos):0 Continuar Tarea Tras Error:Encendido ]
Me parece que te estás saltando casi todo el proceso previo a la codificación, lo que yo llamé PRE-producción. En esa parte previa conviene tomar unas cuantas decisiones, que a su vez implican análisis de opciones. Esa es una parte muy enriquecedora, y parece que no le estás prestando atención... o no nos lo estás contando.
Si ya sabes cuales datos vas a usar, nos lo dices y comentas por qué.
Si ya sabes cuál fuente de datos elegir, cuéntalo y explica por qué.
Si ya sabes cómo vas a gestionar la ubicación y cómo vas a relacionar la ubicación con el servidor y los datos, pues nos lo dices y nos cuentas el plan.
etc.
También te he sugerido que hagas un esquema de la tarea. Algo así:
1º- Obtener ubicación y comprobarla (si no se ha obtenido una ubicación, mensaje de error y abortar tarea).
2º- Obtener datos meteo del servidor, y comprobar que los datos son correctos (en caso contrario reintentar hasta tres veces, o bien...).
...
No quiero seguir porque creo que es preferible que lo hagas tú.
También te recomendé repasar otras tareas similares que puedas encontrar, para ver si tienen algo aprovechable que encaje con tu proyecto. Eso es una investigación interesante, con sus decisiones, que puedes comentar aquí.
En todo este proceso te iremos dando sugerencias. Por ejemplo, Cace te ha recomendado que uses ubicación por Red, Willy te aconseja no usar el servidor de Aemet, etc. A medida que vayas explicando tus dudas y tus decisiones, aparecerán más sugerencias sobre esos temas.
Por último... Desde mi punto de vista, cuando entres en la fase de producción, antes de empezar a codificar acciones concretas... te conviene hacer listado preciso de las variables que vas a utilizar (variables globales y variables locales) con sus nombres específicos y teniendo claro qué información se alojará en cada variable.
WillyWeb
22/02/17, 17:04:17
Como veréis aquí, para ubicarme tiro de Secure Settings para encender el GPS durante 10 seg...
Aparte de que no has seguido los consejos de Caravantes de crear el esquema de lo que pretendes hacer, el GPS y Secure Settings son totalmente prescindibles. Como te dijo cace, la precisión de la ubicación por RED es más que suficiente y no requiere nada más que un par de acciones de Tasker.
Y para localizar una alternativa a AEMET busca sobre esto ... api predicción meteorológica.
Mitrhandir
23/02/17, 11:31:32
Buenas!
He leído 3/4 veces tu primer post Caravantes y voy a tratar de responder a tus preguntas.
- En primer lugar hay que pensar qué información se desea obtener o presentar: ¿Temperaturas? ¿Mínimas y máximas? ¿Vientos? ¿En Kms por hora? ¿En horas de viento? ¿Nubes? ¿Nivel de insolación?...
-Quiero la temperatura actual, el tiempo actual (despejado, nublado, lloviendo, etc.. .) y la previsión meteorológica para las próximas 3/5 horas.
- Cómo se va a presentar esa información: ¿texto, infografía, gráfico? ¿Se va a guardar en algún archivo? ¿Se va a mostrar por pantalla? ¿Se espera que Android vocalice eso, mediante la acción DECIR?
-Quiero usar la Acción Decir
- De dónde se va a obtener esa información: ¿sitio web? ¿app instalada? ¿otro? ¿como se puede obtener la información (método de comunicación/recepción)?
-Quiero usar una web
- La información obtenida es relativa a un lugar y a un momento. ¿Lugar prefijado en el que vivo? ¿Lugar en donde se encuentre el dispositivo, utilizando ubicación cada vez? ¿Quiero obtener la previsión global semanal? ¿diaria, o de otro rango temporal? ¿Quiero obtener cada día tres previsiones (para mañana/tarde/noche)? ¿más previsiones? ¿menos?
-Quiero que me ubique primero y si puede ser, cada 3/5 horas
Creo que ya he contestado a tus preguntas. Disculpa si no acierto a responder lo que tú esperas.
WillyWeb, la ubicación por red a mí no me ubica como debiera. Ahora estoy trabajando en Moncófar y cuando vaya Burriana, que está a unos 10/15 Kms, y ejecuto la misma acción, me dice que estoy en Moncófar, cuando estoy en Burriana. Sin embargo, si lo hago con el GPS, lo clava. Porqué puede ser? Hay que limpiar la variable %LOC?
Caravantes no te mosquees, ten en cuenta, que entre casa, trabajo y 3 niños (de momento) no me queda mucho tiempo. Espero que seas comprensivo.
Un saludo!
WillyWeb
23/02/17, 13:35:15
... la ubicación por red a mí no me ubica como debiera. Ahora estoy trabajando en Moncófar y cuando vaya Burriana, que está a unos 10/15 Kms, y ejecuto la misma acción, me dice que estoy en Moncófar, cuando estoy en Burriana. Sin embargo, si lo hago con el GPS, lo clava. Porqué puede ser? Hay que limpiar la variable %LOC?
La variable que guarda la ubicación por RED no es %LOC es %LOCN. Simplemente tienes que usar la acción de ubicación (creo que 10sg es el mínimo) y luego hacer uso de la variable %LOCN.
Mitrhandir
23/02/17, 16:33:18
He estado leyendo otros post sobre este tema y no veo cuál es mi problema. Lo tengo todo activo (servicios de Google, ubicación, etc..) y estoy en Burriana y sigue con que estoy en Moncófar :enfadadisimo:
WillyWeb
23/02/17, 16:37:26
Tasker no te dice "dónde" estás, así que eso lo estas viendo en otra parte, tal vez en un un widget ¿...?
No hagas caso de eso y usa la variable %LOCN como te he dicho. Deberías conseguir una precisión más que aceptable para saber el tiempo de la zona en la que te mueves.
Caravantes
23/02/17, 16:54:43
-Quiero la temperatura actual, el tiempo actual (despejado, nublado, lloviendo, etc.. .) y la previsión meteorológica para las próximas 3/5 horas.
Bueno, nos vamos aproximando, aunque eso de la previsión meteorológica sigue siendo ambiguo porque no queda claro si te interesan las temperaturas, los milibares, la humedad, los vientos, la probabilidad de lluvia, las nubes o el grado de insolación. Creo que lo mejor sería que tú mismo redactases un texto de ejemplo, texto similar a lo que esperas escuchar mediante la acción Decir.
Respecto a la ubicación, sigue haciendo pruebas y dialogando aquí para ver si encuentras la forma de ubicar por red. Si no fuera posible habría que usar la ubicación GPS, y tampoco sería grave porque una ubicación puntual cada 4 horas no va a gastar mucha batería.
Ahora me estoy acordando de que el compañero Malkair hizo una tarea que intentaba la ubicación por ambos métodos (red y GPS), y la tarea finalmente comparaba la precisión de ambos métodos, quedandose con la ubicación que hubiera tenido más precisión.
http://www.htcmania.com/showthread.php?t=698029
Yo te recomendaría utilizar ese método de Malkair, adaptándolo a tu caso concreto. Si lo haces así, también te recomiendo hacer una tarea o subtarea independiente para eso de la ubicación. Luego, la tarea principal puede llamar a esa subtarea para obtener de ella la ubicación, todo ello en una sola acción de la tarea principal. De esta forma la tarea principal queda más límpia y fácil de mantener.
-Quiero usar una web
¿Has pensado o investigado algo más concreto? Willy te dijo que podías buscar por "api predicción meteorológica". Puesto que alguno de los datos que quieres no son futuros sino actuales, yo propondría una pequeña corrección, buscando por "api información meteorológica"; Mira a ver que vas encontrando que pueda servir para lo que tú quieres, y nos vas contando.
No te preocupes por mi paciencia, tengo mucha, y además no tenemos ninguna prisa. Creo que ahora sí estás entendiendo el método que te he propuesto. Adelante.
Mitrhandir
23/02/17, 17:20:38
Bueno, lo de la localización por red está solucionado (y paso he descubierto un mundo nuevo :risitas: )
Caravantes, ves? No he sido preciso. Con lo de la previsión meteorológica me refiero a si va a llover, si va a hacer sol, etc...
Vale.
A1 me ubico
A2 pop-up con %LOCN (el flash no me va, no sé porqué. Será por el launcher según WillyWeb)
A3 ¿sería separar variable o http GET?
Lo de la API parece ser bastante fiable Weather Undergroung, pero estoy muy abierto a opiniones.
Un saludo!
WillyWeb
23/02/17, 18:57:05
Bueno, lo de la localización por red está solucionado (y paso he descubierto un mundo nuevo :risitas: )
Y supongo que la solución es un secreto, ¿no? :silbando:
Lo de la API parece ser bastante fiable Weather Undergroung, pero estoy muy abierto a opiniones.
Vale, pero aclara un poco más el motivo de tu elección. :loco:
¿En qué página esta la documentación del API?
¿Cómo se hacen las llamadas/consultas?
¿Qué tipo/formato de información entrega el API?
¿Es gratis?
¿Requiere registro?
Piensa que lo que estás haciendo tiene que servir de ayuda para que otro aficionado a Tasker que busque algo como lo que quieres hacer.
Mitrhandir
23/02/17, 22:02:43
No es un secreto. Simplemente estaba haciendo las cosas mal (para variar). Estaba ejecutando un http GET mal.
La elección de esta página es por los comentarios del grupo de telegram, pues parece que tenga buena aceptación. Pero que vamos, estoy muy abierto a otras posibilidades eh?
¿En qué página esta la documentación del API?
Aquí: https://espanol.wunderground.com/weather/api
Sí mal no recuerdo hay que mandar un correo para que te manden tu API a tu correo electrónico.
¿Cómo se hacen las llamadas/consultas?
Con la acción http GET en servidor:puerto habría que poner algo parecido a esto: https://espanol.wunderground.com/cgi-bin/findweather/getForecast?query=%LOC
Y crear un archivo de salida (weather.txt,por ejemplo) para que almacene el resultado en xml.
¿Es gratis?
Completamente.
¿Requiere registro?
Naturalmente, de lo contrario, no te mandan el API.
Espero haber respondido a todas las preguntas bien!
Un saludo!
WillyWeb
23/02/17, 23:13:22
Sigues usando la variable %LOC y eso te obliga a conseguir la ubicación por GPS... mala idea.
Lo que consigues al registrarte es un "API KEY" (un código de acceso) que tienes que añadir en todas las consultas al API.
La documentación está aquí...
https://espanol.wunderground.com/weather/api/d/docs (en inglés)
En la documentación las URLs de los ejemplos comienzan así...
http://api.wunderground.com/api/Your_Key/...
¿Seguro que esa URL que has puesto es correcta?
¿Seguro que puedes hacer una consulta de las condiciones actuales usando como ubicación unas coordenadas?
Mitrhandir
23/02/17, 23:44:09
No, estoy usando %LOCN. Pero ya llegaremos a eso.
¿Seguro que esa URL que has puesto es correcta?
Perdón. Error mío. https://espanol.wunderground.com/cgi-bin/findweather/getForecast?query=%LOCN
Estoy usando esta url y me va bien. Mañana en el curro confirmaré que ubica como toca.
¿Seguro que puedes hacer una consulta de las condiciones actuales usando como ubicación unas coordenadas?
En un principio sí, aunque no tengo muy claro si hay que separar la variable %LOCN para tener la latitud y longitud por separado. De ser así, habría que establecer variable %Locn (por ejemplo) a %LOCN. Luego separar variable %Locn con una "," y para verificar, un pop-up de %Locn1 y otro de %Locn2 para estar seguro de que la variable se ha separado.
Miedito tengo...
Caravantes
23/02/17, 23:50:23
@Caravantes, ves? No he sido preciso. Con lo de la previsión meteorológica me refiero a si va a llover, si va a hacer sol, etc...
Sigo pensando que sería más concreto si escribieras un texto de ejemplo.
Al hablar del servidor dices que lo has elegido porque te parece "fiable". Además tienes que asegurarte de que ese servidor te aporta todos los datos meteorológicos que tú quieres utilizar.
¿sería separar variable o http GET?
Lo normal es que primero hagas un HTTP GET para obtener (de un golpe) el conjunto de datos que te da el servidor, y eso quedaría guardado en una variable de Tasker. Luego habría que usar acciones SEPARAR VARIABLE para ir despiezando el bloque en trocitos que tengan cada uno de los datos que tú necesitas. Finalmente, sería combinar esos datos en una frase o texto (similar al ejemplo que te pido) y finalmente la acción DECIR vocalizará ese texto.
Antes de todo eso tienes que aprender a consultar el servidor, como te ha indicado Willy. Es clave que puedas hacer la consulta para un lugar determinado (municipio o coordenadas). Supongo que la documentación de la api explicará cómo hacerlo. Seguramente te convenga hacer pruebas con un navegador de ordenador, para que hagas sucesivas pruebas modificando la consulta (URL con variaciones en la ubicación) y para que veas claramente el chorro de datos que te devuelve el servidor.
WillyWeb
24/02/17, 08:04:09
Estoy usando esta url y me va bien. Mañana en el curro confirmaré que ubica como toca.
Tercer intento :rolleyes:
Esa URL que estás usando...
https://espanol.wunderground.com/cgi-bin/findweather/getForecast?query=39.890443,-0.084979
...abre la página web que ofrece WU para esas coordenadas (las de Burriana en mi ejemplo). Eso no es usar un API. Un API de este tipo entrega un archivo (normalmente con formato JSON o XML) con los datos que has solicitado. Lo que estás obteniendo es una página web con mucho código HTML que tendrás que procesar. Y si miras ese código comprobarás que no es tarea fácil. Parte de los datos se cargan con AJAX y no están "localizables" a simple vista.
Y hablando de "procesar"... nada de dividir variable, los datos los vas a sacar con RegExp o con JavaScript, como un profesinal. :silbando:
Repito a pregunta... ¿Seguro que puedes hacer una consulta de las condiciones actuales usando como ubicación unas coordenadas? ...y la respuesta está en la documentación del API.
Miedito tengo...
:latigo: ¿por...?
Mitrhandir
24/02/17, 08:57:21
http://api.openweathermap.org/data/2.5/forecast/daily?lat=39.82512724&lon=-0.16198443&cnt=1&lang=es&units=metric&appid=93dc7ed2abd2de8255098818c88cbd6b
Vale, estaba confundido con la url. Esta es la que utilizo (con mi API)
A con sólo unas coordenadas, por sí solas no nos dicen el tiempo (obviamente), pero si almacenamos el resultado de la llamada a la API en un archivo (weather,txt,por ej), luego mediante separar variables, podemos diseccionar y extraer la información que queremos y a su vez, almacenarlo en una variable.
No molas. Has pasado de las palomitas al látigo! :risitas:
Pero esa llamada es a la api de openweather compi.
De todas formas estás a 14 kilómentros si te detecta en moncofar, a lo mejro es debido a que la estación meteorológica está ubicada en Moncofar, o que la precisión del gps no es muy acertada.
Volviendo a lo de la api, tienes que elegir una Weather Underground O Openweather, yo te recomendé Openweather porque el registro era un pelín más sencillo, y la información que tu pedías, era si va a llover o no, pues te bastaba con la que daba Openweather. Tienes que tener en cuenta que cada página web, tiene su sistema organizado de una manera, y una llamada a la API de un servicio es distinta a la de otro.
Creo que tu estás confundiendo el directamente descargar el código HTML de una web mediante el http get, a hacer una llamada a la API de dicha web, que son cosas distintas. Si un servicio dispone de una API, suele ser más sencillo hacer HTTP GET a la api, que bajar el código y trocearlo buscando partes de el que no se repitan.
Ahora veamos la respuesta de la API de OpenWeather, para las siguientes 5 horas
{
"city": {
"id": 2513700,
"name": "Moncofar",
"coord": {
"lon": -0.14701,
"lat": 39.809071
},
"country": "ES",
"population": 0
},
"cod": "200",
"message": 0.0115,
"cnt": 1,
"list": [
{
"dt": 1487937600,
"temp": {
"day": 15.7,
"min": 4.75,
"max": 16.43,
"night": 4.75,
"eve": 11.51,
"morn": 10.35
},
"pressure": 980.27,
"humidity": 94,
"weather": [
{
"id": 500,
"main": "Rain",
"description": "lluvia ligera",
"icon": "10d"
}
],
"speed": 2.72,
"deg": 333,
"clouds": 20
}
]
}
Vemos que contiene una cabecera, en la que hay información sobre si la llamada a la api ha sido correcta o si ha habido un error, información sobre el lugar del cual nos proporciona datos y CNT que es el número de previsiones que te da (1 es para que solo te mande el de las siguientes horas, con un mayor número en cnt, podrías obtener previsiones para los siguientes días u horas).
Tras esta cabecera, vienen los datos que nos interesan, bajo el "apartado" list. Ahí tenemos una estructura de datos que se puede procesar con JS, REGEX o un plugin como autotools. Yo suelo usar Autotools por la facilidad que me ofrece y mi desconocimiento sobre JS o REGEX.
En cuanto a los datos que ofrece, tienes las temperaturas en cada momento del día así como las máximas y mínimas
"temp": {
"day": 15.7,
"min": 4.75,
"max": 16.43,
"night": 4.75,
"eve": 11.51,
"morn": 10.35
}
La descripción general del tiempo que hace, así como una serie de datos sueltos (presion, velocidad del viento, humedad...)
"pressure": 980.27,
"humidity": 94,
"weather": [
{
"id": 500,
"main": "Rain",
"description": "lluvia ligera",
"icon": "10d"
}
]
Ahora ya solo te queda ir despiezando el JSON(así es como se llama a lo que devuelve esta API) en las partes que te interasan, e ir metiendo en variables los datos.
Un saludo
Edito: Tambien tienes la hora para la cual es la predicción, bajo el apartado "dt": 1487937600, solo te queda transformarlo a la fecha y hora habituales.
WillyWeb
24/02/17, 10:23:01
No molas. Has pasado de las palomitas al látigo!
:risitas: :risitas: :risitas: ... pero ha funcionado, ¿no?
... almacenamos el resultado de la llamada a la API en un archivo (weather.txt, por ej), luego mediante separar variables, podemos diseccionar y extraer la información que queremos y a su vez, almacenarlo en una variable.
Que te olvides de separar variable :latigo:
Yo diría que el resultado parece un archivo con formato JSON. Seguramente eso lo aclara la documentación. :silbando:
Si es JSON eso es relativamente sencillo de procesar desde JavaScript. Busca en Google (o dónde quieras) cómo hacerlo.
Mitrhandir
24/02/17, 11:00:36
Sí, es JSON y llamada de la API nos devuelve un montón de cosas (temperatura,velocidad del viento,etc...) entonces mediante la acción javascriptlet podemos extraer esos datos.
Voy bien?
Ostras, fus, pues entonces, me quedo con openweather!
WillyWeb
24/02/17, 11:25:29
No me había dado cuenta de tu respuesta. Me has ganado por la mano. :D
De todas formas estás a 14 kilómentros si te detecta en moncofar, a lo mejro es debido a que la estación meteorológica está ubicada en Moncofar, o que la precisión del gps no es muy acertada.
Si está usando la ubicación por RED es posible que ese sea el origen del problema (que no es un problema en este caso) ya que se basa en las antenas de telefonía y las posiciones de los WiFi que tengas cerca y que Google tenga registrados.
Volviendo a lo de la api, tienes que elegir una Weather Underground O Openweather...
O sea, que la culpa de que nos cambie de WU a OW sin avisar es tuya ... vale, vale :silbando:
Creo que tu estás confundiendo el directamente descargar el código HTML de una web mediante el http get, a hacer una llamada a la API de dicha web, que son cosas distintas. Si un servicio dispone de una API, suele ser más sencillo hacer HTTP GET a la api, que bajar el código y trocearlo buscando partes de el que no se repitan.
Creo que eso ya está aclarado. Ahora está usando una llamada al API en vez de tirar de la página web.
... tenemos una estructura de datos que se puede procesar con JS, REGEX o un plugin como autotools. Yo suelo usar Autotools por la facilidad que me ofrece y mi desconocimiento sobre JS o REGEX.
Procesar un JSON es muy sencillo. Necesitas una única acción de Tasker y tres o cuatro líneas de JavaScript.
WillyWeb
24/02/17, 11:27:32
Sí, es JSON y llamada de la API nos devuelve un montón de cosas (temperatura,velocidad del viento,etc...) entonces mediante la acción javascriptlet podemos extraer esos datos.
Voy bien?
Ostras, fus, pues entonces, me quedo con openweather!
De momento pinta bien. :ok:
Y los resultados de WU y OW no son muy diferentes, así que podrías usar cualquiera de los dos sin demasiadas complicaciones.
Mitrhandir
24/02/17, 14:06:23
Vale, tiremos por openweather, porque ya tengo la API. Hasta aquí todo claro, pero es a partir de aquí cuando ya es terreno muy desconocido para mí. Qué hago con la devolución del API? Javascript? Ni idea.
Hay que tener en cuenta que para mí el lenguaje de programación me suena a chino, así que, tened compasión conmigo y los lectores: somos dummies!
No me había dado cuenta de tu respuesta. Me has ganado por la mano. :D
Si está usando la ubicación por RED es posible que ese sea el origen del problema (que no es un problema en este caso) ya que se basa en las antenas de telefonía y las posiciones de los WiFi que tengas cerca y que Google tenga registrados.
O sea, que la culpa de que nos cambie de WU a OW sin avisar es tuya ... vale, vale :silbando:
Creo que eso ya está aclarado. Ahora está usando una llamada al API en vez de tirar de la página web.
Procesar un JSON es muy sencillo. Necesitas una única acción de Tasker y tres o cuatro líneas de JavaScript.
Oye culpa mía no, yo le ayudé a montar una tarea para recibir los datos desde openweather, pero luego en el grupo de telegram, salió la opción de weather underground, y se lió la gosadera.
Y lo de JS ya sé que es mucho más fácil, pero es que la app que yo uso no permite JavaScript (Automagic), y aún no he dado JS en mi grado así que ando perdido, pero aunque imagino que no será´muy dificil, para alguien que no sabe nada de código, es todo un mundo, así que yo creo que la mejor opción para mith es usar el plugin autotools, que te permite parsear los json de manera bastante sencilla. :silbando:
cace0353
24/02/17, 16:41:53
WillyWeb dijo:
"Procesar un JSON es muy sencillo. Necesitas una única acción de Tasker y tres o cuatro líneas de JavaScript."
Podrias echarnos un cable? (Lo más explícito possible 😊)
Enviat des del meu Nexus 5 usant Tapatalk
Caravantes
24/02/17, 16:58:59
Hola.
Creo que Fus ha hecho un trabajo fantástico analizando y comentando esa API de OpenWeather... pero creo que me he perdido un poco porque no he visto una URL que me lleve a obtener una información como la que ha mostrado FUS.
Tampoco veo que hayáis comentado nada sobre cómo se gestiona (a través de la URL u otra técnica de la API) la ubicación y el tiempo (time) de la información pedida. O Sea: ¿Cómo de digo que quiero la situación climatológica actual para tal ubicación? ¿Cómo le digo que quiero la previsión para las próximas 5 horas?
Mitrhandir, me parece que te estás embalando hacia pasos posteriores (Qué hago con la devolución del API? Javascript? Ni idea.) cuando no se han resuelto estos pasos previos que estoy comentando... o al menos no los habéis explicado.
Mitrhandir, sigo sin ver un ejemplo del texto que quieres generar en la parte final de la tarea, para la acción Decir. Sin eso, se me hace difícil saber si la API nos aporta los datos que quieres usar, y menos aún saber cómo trocear la información obtenida.
> Quiero la temperatura actual, el tiempo actual (despejado, nublado, lloviendo, etc.. .) y la previsión meteorológica para las próximas 3/5 horas...
> Con lo de la previsión meteorológica me refiero a si va a llover, si va a hacer sol, etc...
¿Esta API te dice algo como "Va a llover" o "No va a llover"?
¿Esta API te dice algo como "Va a hacer sol" o "No va a hacer sol"?
Hay que analizar si esta API aporta los datos que quieres gestionar...
Porfa, pon un ejemplo del texto que quieres generar en la parte final de la tarea, para la acción Decir.
Mitrhandir
24/02/17, 18:13:01
Tampoco veo que hayáis comentado nada sobre cómo se gestiona (a través de la URL u otra técnica de la API) la ubicación y el tiempo (time) de la información pedida. O Sea: ¿Cómo le digo que quiero la situación climatológica actual para tal ubicación? ¿Cómo le digo que quiero la previsión para las próximas 5 horas?
- Ni idea :oh: eso escapa a mi comprensión.
Mitrhandir, sigo sin ver un ejemplo del texto que quieres generar en la parte final de la tarea, para la acción Decir. Sin eso, se me hace difícil saber si la API nos aporta los datos que quieres usar, y menos aún saber cómo trocear la información obtenida.
-Lo sé y te pido disculpas. Pero al ser un tema absolutamente nuevo para mí, no sabía por dónde iban a ir los tiros.
La idea es que por las mañanas, cuando salga del modo silencio, la muy odiada por mi mujer, mi amiga Conchita me diga: Buenos días Javi. Estás en %Lugar, %hhh %mmm %ccc y estamos a %DAYW, %DATE. La temperatura es de %Temperatura grados, y el cielo está %Cielo. Se espera %Lluvia dentro de X tiempo ¡Que tengas un buen día!
Luego tengo pensado que la tarea se ejecute cada 3 horas (por ejemplo) y que si se aproximan lluvias, Conchita me avise (bueno, casi mejor una notificación, que ya me está mirando mal mi señora) :risitas:
Luego, cuando llegue al curro y encienda la pantalla, que me diga: Buenas tardes y bienvenido al curro Javi. Estás en %Lugar, %hhh %mmm %ccc y estamos a %DAYW, %DATE. La temperatura es de %Temperatura grados, y el cielo está %Cielo. Se espera %Lluvia dentro de X tiempo ¡Que te sea leve!
¿Esta API te dice algo como "Va a llover" o "No va a llover"?
¿Esta API te dice algo como "Va a hacer sol" o "No va a hacer sol"?
-Pues sinceramente, Caravantes, no sabría decirte. Imagino que si no hay lluvia, devolverá un valor de 0 o espacio vacío y si la hay, devolverá un número del 0 al 100 a modo de porcentaje de probabilidad de lluvia.
Espero que mi respuesta te haya sido de utilidad.
Un saludo!
Por cierto, aquí dejo mi API: http://api.openweathermap.org/data/2.5/forecast?lat=39.82512724&lon=-0.16198443&cnt=1&lang=es&units=metric&APPID=247a6501c1fd7618ca947cf05acce72f
Caravantes
24/02/17, 18:59:55
> ¿Cómo le digo que quiero la situación climatológica actual para tal ubicación? ¿Cómo le digo que quiero la previsión para las próximas 5 horas?
- Ni idea eso escapa a mi comprensión.
Pues tendrás que estudiarte la documentación de la API para ver cómo se gestionan esos dos detalles.
Buenos días Javi. Estás en %Lugar, %hhh %mmm %ccc y estamos a %DAYW, %DATE. La temperatura es de %Temperatura grados, y el cielo está %Cielo. Se espera %Lluvia dentro de X tiempo ¡Que tengas un buen día!
¿Ves? Con ese texto hemos averiguado varios detalles, alguno inesperado: Quieres el nombre del lugar, supongo que el municipio. La ubicación solo te da las coordenadas. Averiguar el nombre del lugar implica otro conjunto de acciones, o una subtarea.
En el post siguiente hay una subtarea llamada "UbicNombreSitio" que sirve precisamente para eso, para averiguar el nombre del sitio en función de las coordenadas obtenidas por la ubicación. Esa subtarea devuelve algo como "Calle Dulcinea, 45. 28020 Madrid", pero te será fácil adaptarla para sacar solo el nombre del municipio, o lo que quieras sacar.
http://www.htcmania.com/showpost.php?p=11696058&postcount=35
Imagino que si no hay lluvia, devolverá un valor de 0 o espacio vacío y si la hay, devolverá un número del 0 al 100 a modo de porcentaje de probabilidad de lluvia.
Seguramente. O sea que tu texto de ejemplo habría que modificarlo más o menos así:
Buenos días Javi. Estás en MatalascabrasDelDuque. Son las siete treina del martes doce de febrero de 2017. La temperatura es de 11 grados, y el cielo está cubierto al 40 por ciento. Las posibilidades de lluvia ahora son de 20 por ciento; dentro de tres horas son del 50 por ciento. Que tengas un buen día.
Hay una parte que utiliza datos obtenidos de la API meteo: La temperatura es de 11 grados, y el cielo está cubierto al 40 por ciento. Las posibilidades de lluvia ahora son de 20 por ciento; dentro de tres horas son del 50 por ciento.
Hay otra parte que utiliza datos carentes de relación con la API meteo: Estás en MatalascabrasDelDuque. Son las siete treina del martes doce de febrero de 2017.
Finalmente, el texto final incluye también dos fragmentos fijos: Buenos días Javi. [...] Que tengas un buen día.
WillyWeb
24/02/17, 19:01:15
Y lo de JS ya sé que es mucho más fácil, pero es que la app que yo uso no permite JavaScript (Automagic), y aún no he dado JS en mi grado así que ando perdido...
Tienes mucha información en la red. Yo suelo usar la de aquí...
https://www.w3schools.com/js/js_json_intro.asp
Podrias echarnos un cable? (Lo más explícito possible 😊)
Supongamos que tienes el código JSON de esa respuesta del API en una variable local de Tasker ... %json
Supongamos que quieres saber la ciudad que aparece en la respuesta ... "city.name"
Añades una acción JavaScriptlet y pones esto...
obj = JSON.parse(json);
var city = obj.city.name;
En la siguiente acción de Tasker después de ejecutarse ese script tendrás disponible una variable local de nombre %city con el contenido de esa parte del JSON.
Creo que no se puede hacer más simple. :loco:
Y si me vas a preguntar de dónde me he sacado ese "city.name" ... de la documentación del API, naturalmente. :silbando:
... pero creo que me he perdido un poco porque no he visto una URL que me lleve a obtener una información como la que ha mostrado FUS.
La que han usado para esa "prueba de concepto" creo que ha sido esta...
http://api.openweathermap.org/data/2.5/forecast/daily?lat=39.82512724&lon=-0.16198443&cnt=1&lang=es&units=metric&appid=93dc7ed2abd2de8255098818c88cbd6b
Tampoco veo que hayáis comentado nada sobre cómo se gestiona (a través de la URL u otra técnica de la API) la ubicación y el tiempo (time) de la información pedida. O Sea: ¿Cómo de digo que quiero la situación climatológica actual para tal ubicación? ¿Cómo le digo que quiero la previsión para las próximas 5 horas?
Los detalles de lo que este API permite hacer están aquí ...
http://www.openweathermap.org/api
¿Esta API te dice algo como "Va a llover" o "No va a llover"?
¿Esta API te dice algo como "Va a hacer sol" o "No va a hacer sol"?
Más o menos. :rolleyes:
Una vez "parseado" el JSON de la respuesta el objeto "list[0].weather[0].description" contiene valores del tipo "cielo claro".
Mitrhandir
24/02/17, 19:27:37
Sí no os importa, voy a transcribir aquí mi js (con la inestimable ayuda de K2 y L.L., que me lo han explicado paso a paso)
El http GET me devuelve esto:
{"city":{"id":2513700,"name":"Moncofar","coord":{"lon":-0.14701,"lat":39.809071},"country":"ES","population":0,"sys":{"population":0}},"cod":"200","message":0.003,"cnt":1,"list":[{"dt":1487970000,"main":{"temp":12.93,"temp_min":12.93,"temp_max":13.17,"pressure":1028.9,"sea_level":1031.07,"grnd_level":1028.9,"humidity":100,"temp_kf":-0.24},"weather":[{"id":800,"main":"Clear","description":"cielo claro","icon":"01n"}],"clouds":{"all":0},"wind":{"speed":1.05,"deg":193.503},"rain":{},"sys":{"pod":"n"},"dt_txt":"2017-02-24 21:00:00"}]}
y luego....
//cargamos los datos que nos ha devuelto en el entorno del scriptlet
var entrada = global('HTTPD');
//creamos un objeto vacio
var objJson = new Object();
//cargamos en el objeto los datos
objJson = JSON.parse(entrada);
//extraemos los datos que nos interesen
var nombre = objJson['city']['name'];
var maxdia = objJson['list'][0]['temp']['max'];
var minnoche = objJson['list'][0]['temp']['min'];
var descripcion = objJson['list'][0]['weather'][0]['description'];
//Sacamos las variables con la informacion
setGlobal('%Localidad',nombre);
setGlobal('%MaxDia',maxdia);
setGlobal('%MinDia',minnoche);
setGlobal('%MaxDia',maxdia);
setGlobal('%Descripcion',descripcion);
Quiero crear el código yo solo (para coger soltura, más que nada), pero la lío parda.
:risitas: está visto que Javascriptlet es mi fuerte eh?
WillyWeb
24/02/17, 19:45:08
//creamos un objeto vacio
var objJson = new Object();
No es imprescindible hacer eso. Sólo con la líneas del "JSON.parse" funciona igual.
//extraemos los datos que nos interesen
var nombre = objJson['city']['name'];
var maxdia = objJson['list'][0]['temp']['max'];
var minnoche = objJson['list'][0]['temp']['min'];
var descripcion = objJson['list'][0]['weather'][0]['description'];
Esas líneas también las puedes escribir así...
var nombre = objJson.city.name;
Mucho más sencillo y fácil de leer/escribir.
//Sacamos las variables con la informacion
setGlobal('%Localidad',nombre);
setGlobal('%MaxDia',maxdia);
setGlobal('%MinDia',minnoche);
setGlobal('%MaxDia',maxdia);
setGlobal('%Descripcion',descripcion);
Eso es innecesario. Las variables que creas en el bloque anterior (nombre, maxdia, etc...) ya son accesibles desde Tasker como variables locales (%nombre, %maxdia, etc...).
Este código JS hace exactamente lo mismo que el que has puesto pero sin crear variables globales...
//pasamos la variable global HTTPD al entorno del scriptlet
var json = global('HTTPD');
//creamos un objeto con los datos JSON
obj = JSON.parse(json);
//extraemos los datos que nos interesen
var nombre = obj.city.name;
var maxdia = obj.list[0].temp.max;
var minnoche = obj.list[0].temp.min;
var descripcion = obj.list[0].weather[0].description;
WillyWeb
24/02/17, 21:24:46
Viendo la URL que estáis usando con más calma ...
http://api.openweathermap.org/data/2.5/forecast/daily
... me estoy dando cuenta de que es de este API ...
http://www.openweathermap.org/forecast16
... que proporciona la predicción de hasta 16 días.
Para lo que querías hacer creo que es mejor esta otra ...
http://www.openweathermap.org/forecast5
... que proporciona predicciones de hasta 5 días cada 3 horas.
En cambio de URL es muy simple ...
http://api.openweathermap.org/data/2.5/forecast
... y el del código JS tampoco es complicado ...
var maxdia = obj.list[0].temp.max; (antes)
var maxdia = obj.list[0].main.temp_max; (ahora)
... que proporciona predicciones de hasta 5 días cada 3 horas.
En cambio de URL es muy simple ...
http://api.openweathermap.org/data/2.5/forecast
... y el del código JS tampoco es complicado ...
var maxdia = obj.list[0].temp.max; (antes)
var maxdia = obj.list[0].main.temp_max; (ahora)
Es la que hemos estado utilizando, el problema con la de 3 horas, es que creo que no da las máximas del día, y era lo que en un principio quería mi peor pesadilla mith, por lo que opte por usar la predicción diaria.
Y el JS estaba un poco más desarrollado porque no tenía ni idea de JavaScript yo, el ya tenía ese código que se lo había pasado alguien, y hemos hecho lo que buenamente hemos podido :sisi1::sisi1:
Y lo que comenta caravantes, la api te devuelve el nombre de la localidad en la que estás y la hora de la predicción, la hora actual, pues tasker la puede dar tranquilamente el mismo..
Y con todo esto creo que la consulta quedaría medio cerrada, a falta de que conchita diga lo que tiene que decir :silbando:
Un saludo
Edit: Acabo de mirar la documentación de la API, y la predicción para las 3 horas no da las máximas, el valor temp_max es útil sólo para ciudades muy grandes en las que la temperatura pueda variar entre una zona y otra
list.main.temp Temperature. Unit Default: Kelvin, Metric: Celsius, Imperial: Fahrenheit.
list.main.temp_min Minimum temperature at the moment of calculation. This is deviation from 'temp' that is possible for large cities and megalopolises geographically expanded (use these parameter optionally). Unit Default: Kelvin, Metric: Celsius, Imperial: Fahrenheit.
list.main.temp_max Maximum temperature at the moment of calculation. This is deviation from 'temp' that is possible for large cities and megalopolises geographically expanded (use these parameter optionally). Unit Default: Kelvin, Metric: Celsius, Imperial: Fahrenheit.
Mitrhandir
24/02/17, 23:02:29
Ya sabes, a mí o se me quiere o se me odia... Pero tu peor pesadilla fus? :risitas:
A ver, estoy utilizando esta url : http://api.openweathermap.org/data/2.5/forecast/daily?lat=39.82512724&lon=-0.16198443&cnt=1&lang=es&units=metric&APPID=247a6501c1fd7618ca947cf05acce72f
Y tengo como archivo de salida weather.txt el cual me arroja todo esto:
{"city":{"id":2513700,"name":"Moncofar","coord":{"lon":-0.14701,"lat":39.809071},"country":"ES","population":0},"cod":"200","message":0.0916,"cnt":1,"list":[{"dt":1487937600,"temp":{"day":6.92,"min":4.4,"max":6.92,"night":4.4,"eve":6.92,"morn":6.92},"pressure":983.35,"humidity":63,"weather":[{"id":800,"main":"Clear","description":"cielo claro","icon":"01n"}],"speed":2.95,"deg":326,"clouds":0}]}
Ahora bien (y aquí es donde me vuelvo loco) yo quiero sacar a relucir toda la información posible.
Luego edito, que voy a probar.
Edito: en la acción javascript estoy usando esto:
var json = global('HTTPD');
obj = JSON.parse(json);
var nombre = obj.city.name; var maxdia = obj.list[0].temp.max; var minnoche = obj.list[0].temp.min; var descripcion = obj.list[0].weather[0].description;
WillyWeb tenía toda la razón. Más limpio y más fácil de leer.
Ahora voy a intentar yo solo extraer todos los datos que faltan.
Edito: var json = global('HTTPD');
obj = JSON.parse(json);
var nombre = obj.city.name; var maxdia = obj.list[0].temp.max; var minnoche = obj.list[0].temp.min; var descripcion = obj.list[0].weather[0].tiempo;
obj.list[0].pressure[0].presion;
obj.list[0].humidity[0].humedad;
obj.list[0].weather[0].tempus;
obj.list[0].speed[0].velocidad;
obj.list[0].clouds[0].nubes;
He añadido los últimos, pero no acierto a escribir bien el código. :oh:
Edito otra vez : var json = global('HTTPD');
obj = JSON.parse(json);
var nombre = obj.city.name;
var maxdia = obj.list[0].temp.max;
var minnoche = obj.list[0].temp.min;
var descripcion = obj.list[0].weather;
var presion = obj.list[0].pressure;
var humedad = obj.list[0].humidity;
var tempus = obj.list[0].weather;
var velocidad = obj.list[0].speed;
var nubes = obj.list[0].clouds;
Creo que ahora está bien, pero no furula!
WillyWeb
25/02/17, 08:33:12
A ver, estoy utilizando esta url : http://api.openweathermap.org/data/2...947cf05acce72f
Y tengo como archivo de salida weather.txt el cual me arroja todo esto:
{"city":{"id":2513700,"name":"Moncofar","coord":{" lon":-0.14701,"lat":39.809071},"country":"ES","populatio n":0},"cod":"200","message":0.0916,"cnt":1,"lis t":[{"dt":1487937600,"temp":{"day":6.92,"min":4.4,"max ":6.92,"night":4.4,"eve":6.92,"morn":6.92},"pressu re":983.35,"humidity":63,"weather":[{"id":800,"main":"Clear","description":"cielo claro","icon":"01n"}],"speed":2.95,"deg":326,"clouds":0}]}
Ahora voy a intentar yo solo extraer todos los datos que faltan.
var json = global('HTTPD');
obj = JSON.parse(json);
var nombre = obj.city.name; var maxdia = obj.list[0].temp.max; var minnoche = obj.list[0].temp.min; var descripcion = obj.list[0].weather[0].tiempo;
obj.list[0].pressure[0].presion;
obj.list[0].humidity[0].humedad;
obj.list[0].weather[0].tempus;
obj.list[0].speed[0].velocidad;
obj.list[0].clouds[0].nubes;
He añadido los últimos, pero no acierto a escribir bien el código.
var json = global('HTTPD');
obj = JSON.parse(json);
var nombre = obj.city.name;
var maxdia = obj.list[0].temp.max;
var minnoche = obj.list[0].temp.min;
var descripcion = obj.list[0].weather;
var presion = obj.list[0].pressure;
var humedad = obj.list[0].humidity;
var tempus = obj.list[0].weather;
var velocidad = obj.list[0].speed;
var nubes = obj.list[0].clouds;
Creo que ahora está bien, pero no furula!
Normal. No has respetado la estructura que tienen esos datos. Tienes que estudiar la documentación y ver la forma de ese "árbol" de resultados.
Puede que esto te ayude...
http://codebeautify.org/jsonviewer
Copia el código JSON en la ventana de la izquierda y pulsa el botón "Tree Viewer". En la ventana de la derecha aparecerá una representación en forma de árbol en la que se aprecia mucho mejor la dependencia de cada elemento. Mira qué valor de interesa y recorre el árbol desde arriba hasta llegar a él.
Esos [0] sólo los tienes que poner detrás de valores de los que cuelga un "0".
var descripcion = obj.list[0].weather[0].description;
Y no los tienes que poner si no hacen falta...
var nombre = obj.city.name;
Si ese visor note gusta prueba con estos...
http://www.jsoneditoronline.org/
http://jsonviewer.stack.hu/
Y por cierto, no es necesario que guardes el resultado en un archivo (weather.txt) que luego no usas para nada. Lo que pasas al script es la variable %HTTPD, no el archivo. :silbando:
Mitrhandir
25/02/17, 08:56:45
Buenas!
He probado las 3 webs que comentas y la más amigable es la última (recuerda que lo hago todo con el móvil).
Para mí esto es muy nuevo! Sé lo que quieres decirme, pero ten en cuenta de que enfrente tienes a un tío que jamás ha tocado nada sobre programación, así que, mon ami, dame cuartel!
WillyWeb
25/02/17, 09:09:13
Vaaale, guardaré el látigo. :eaea:
¿Eres capaz de seguir la estructura de los datos?
¿Ves claro cómo se llega hasta "description", por ejemplo? (obj.list[0].weather[0].description)
Mitrhandir
25/02/17, 10:04:38
Te lo diré con 2 letras: no
Esto es como si me voy a EE. UU. y me viene una rubia despampanante diciéndome "Follow-me". Y hago lo que yo entiendo o me parece entender.
Y sí, soy un completo neófito y lerdo (hoy menos que ayer) , pero el único que se atreve a preguntar, porque entiendo que el que pregunta, es tonto 5 minutos, pero el que no pregunta, aunque lea los tutoriales, es tonto toda la vida. (sin ánimo de ofender, hablo por mí)
Entonces, cuando me habláis de js, de JSON, de API'S, etc... ,me entra dolor de cabeza. Pero con las variables me pasaba lo mismo y mira hoy.
Sé que la mayoría sois informáticos, y lo que vosotros dáis por hecho, para los neófitos como yo, se nos hace muy cuesta arriba.
Un saludo!
cace0353
25/02/17, 10:26:16
Estoy haciendo pruebas con el Api de Openweathermap.
Bajo el epígrafe dt: hay la fecha/hora en formato segundos, como %TIMES.
Extraigo su valor mediante
var dia = obj.list[0].dt;
Luego utilizo una acción Convertir Variable para pasarla a formato fecha/hora comprensible (hay varias opciones)
Ahora bién, el valor de la variable %dia (para hoy es 1488024000) no cambia durante todo el día (lo comprobé ayer) y devuelve como hora las 13:00.
La pregunta: ¿quiere esto decir que no hay actualización a lo largo del día?
Lo comento porque el xml de Aemet creo se va actualizando. Si es así, el "ajuste" de las previsiones puede ser más preciso.
Estaré comprobando y cotejando resultados algunos días y ya os contaré…
Mientras tanto aprendo a hacer nuevas cosas con Javascript!
Enviat des del meu SM-T550 usant Tapatalk
WillyWeb
25/02/17, 11:06:17
Supongamos que partimos de estos datos en formato JSON...
{"city":{"id":2513700,"name":"Moncofar","coord" :{" lon":-0.14701,"lat":39.809071},"country":"ES","populatio n":0},"cod":"200","message":0.0916,"cnt":1,"lis t":[{"dt":1487937600,"temp":{"day":6.92,"min":4.4," max ":6.92,"night":4.4,"eve":6.92,"morn":6.92},"pr essu re":983.35,"humidity":63,"weather":[{"id":800,"main":"Clear","description":"cielo claro","icon":"01n"}],"speed":2.95,"deg":326,"clouds":0}]}
Si los metemos en uno de esos visores que te he pasado antes verás su organización (la misma que está descrita con detalle en la documentación) en forma de árbol desplegable al estilo de la típica estructura de carpetas.
Si quieres obtener el nombre de la ciudad tiene que recorrer ese árbol desde su origen (object) hasta al valor que te interesa (name) como si fueses abriendo carpetas una detrás de otra...
ciudad=object.city.name
976199
Simplemente tienes que poner el nombre de cada rama de ese árbol separada con un punto.
Supongamos que ahora quieres saber la temperatura máxima (max)...
temp_max=object.list[0].temp.max
976202
Igual que antes se recorre el árbol desde su origen hasta el valor que te interesa separando cada rama con un punto. Lo único que cambia ahora es ese "list[0]". Si te fijas bien verás que detrás de "list" tienes un número entre corchetes "[1]". Eso indica que esa rama puede tener más de un bloque de datos colgando de ella y que en este caso sólo tiene 1. Esos bloques de datos se organizan como un array, y la forma de hacer referencia a cada elemento de un array es poner su número de índice entre corchetes. El número de índice del primer bloque de datos es ese "0" que cuelga de "list", lo que resulta en que esa rama será "list[0]", la siguiente sería "list[1]", y así sucesivamente.
WillyWeb
25/02/17, 11:12:06
La pregunta: ¿quiere esto decir que no hay actualización a lo largo del día?
Si estás usando el API de previsiones hasta 16 días puede ser...
http://www.openweathermap.org/forecast16
En cambio, el API de previsiones hasta 5 días...
http://www.openweathermap.org/forecast5
...se actualiza cada 3 horas.
cace0353
25/02/17, 11:20:19
Si estás usando el API de previsiones hasta 16 días puede ser...
http://www.openweathermap.org/forecast16
En cambio, el API de previsiones hasta 5 días...
http://www.openweathermap.org/forecast5
...se actualiza cada 3 horas.
Lo siento, lo acabo de probar y me devuelve la misma hora: las 13:00 de hoy, o sea: dentro de una hora y 50 minutos (?)![emoji4]
Ya veo que habrá que probar con WU o quedarme con la kilométrica tarea clásica que ya tengo hecha para el htnl de Aemet…
Enviat des del meu Nexus 5 usant Tapatalk
WillyWeb
25/02/17, 11:55:33
Lo siento, lo acabo de probar y me devuelve la misma hora: las 13:00 de hoy...
Pues me temo que has interpretado mal la documentación. Prueba esta URL...
http://api.openweathermap.org/data/2.5/forecast?lat=39.82512724&lon=-0.16198443&cnt=20&lang=es&units=metric&APPID=247a6501c1fd7618ca947cf05acce72f
Son 20 predicciones a intervalos de 3 horas y la primera es para las 12:00 de hoy (ahora son las 11:55).
cace0353
25/02/17, 12:48:51
Gracias WillyWeb!
He exportado %HTTPD con el formato que propones (con cnt=20) a un archivo de texto y he visto que hay varios "dt".
Tendré que rehacer el JS…!
Enviat des del meu Nexus 5 usant Tapatalk
Mitrhandir
25/02/17, 17:41:17
Oh! Muchas gracias WillyWeb! Muy clarificador! Eres la caña!
Ahora veo que estaba codificado mal. "Temp" es una carpeta y "Weather" es otra.
De verdad. Gracias!
Caravantes
25/02/17, 23:00:18
Si quieres obtener el nombre de la ciudad tiene que recorrer ese árbol desde su origen (object) hasta al valor que te interesa (name) como si fueses abriendo carpetas una detrás de otra...
Muchísimas gracias, Willy. No tenía ni idea de lo que era el formato JSON, pero creo que ya entiendo los aspectos más importantes. Tampoco tenía nociones sobre el funcionamiento de una API, y también me estoy enterando bastante. Gracias.
Mitrhandir
26/02/17, 07:30:57
var json = global('HTTPD');
obj = JSON.parse(json);
var lugar = obj.city.name;
var ahora = obj.list.temp.day;
var minnoche = obj.list.temp.min;
var maxdia = obj.list.temp.max;
var noche = obj.list.temp.night;
var tarde = obj.list.temp.eve;
var mañana = obj.list.temp.morn;
var presion = obj.list.temp.pressure;
var humedad = obj.list.temp.humidity;
var tempus = obj.list.temp.weather;
var velocidad = obj.list.temp.speed;
var direccion = obj.list.temp.deg;
var nubes = obj.list.temp.clouds;
Definitivamente, soy idiota. El fallo seguro que es una tontería!
Sé que son los corchetes!
WillyWeb
26/02/17, 09:23:24
El fallo seguro que es una tontería! ... Sé que son los corchetes!
Pues sí, faltan corchetes. Los elementos "list" y "weather" los llevaban, al menos en los JSON que he visto hasta ahora. Y también parece que te has perdido en el árbol de datos. Deberías repasar mi mensaje #56 (el de las imágenes). :oh:
Si sigues usando el API "Call 16 day / daily forecast data", esto debería funcionar...
json = global('HTTPD');
obj = JSON.parse(json);
var lugar = obj.city.name;
var ahora = obj.list[0].temp.day;
var minnoche = obj.list[0].temp.min;
var maxdia = obj.list[0].temp.max;
var noche = obj.list[0].temp.night;
var tarde = obj.list[0].temp.eve;
var mañana = obj.list[0].temp.morn;
var presion = obj.list[0].pressure;
var humedad = obj.list[0].humidity;
var tempus = obj.list[0].weather[0].description;
var velocidad = obj.list[0].speed;
var direccion = obj.list[0].deg;
var nubes = obj.list[0].clouds;
Compara ese código con el árbol siguiente y mira si ves claro cómo sacar todos los valores...
976445
cace0353
26/02/17, 16:11:49
Hola, estoy haciendo pruebas y creo que acabo de descubrir el "misterio de Moncófar":
Estoy en Barcelona, barrio de Gràcia y en "city" me devuelve "el Clot" que es un barrio relativamente lejano. Conclusión que deduzco: en city está la ubicación de la estación metereológica que proporciona los datos...
Otra observación: los grados los devuelve con dos decimales (es una previsión basada en datos estadísticos). Casi que convendria simplificar los valores redondeando. Para ello basta con pedir en todas las extracciones de datos con decimales que no interesan que redondee los valores así:
var maxdia = Math.round(obj.list[0].main.temp_max);
Finalmente: ahora, con sol y sin una nube, me da una humedad relativa del 100% (no creo que estemos por encima del 65% realmente). Es un error de la estación ó no se trata de un valor porcentual como lo usamos habitualmente (en otra escala)?
Saludos!
WillyWeb
26/02/17, 17:48:50
... Conclusión que deduzco: en city está la ubicación de la estación metereológica que proporciona los datos...
La documentación del API no lo aclara, aunque se podría interpretar que "city" tiene el nombre de la ubicación "precisa" de la predicción.
Deberías comparar las coordenadas que envías en la URL con las del resultado. Si estás usando la ubicación por RED es posible que estés enviando la posición de una antena de telefonía que no coincida exactamente con el sitio en el que está el dispositivo.
También podrías ubicarte por GPS y comparar resultados.
... los grados los devuelve con dos decimales (es una previsión basada en datos estadísticos).
No veo nada en la documentación sobre que sean datos estadísticos. En todas partes pone que son datos obtenidos de estaciones. :oh:
Casi que convendria simplificar los valores redondeando...
var maxdia = Math.round(obj.list[0].main.temp_max);
Pues sí. :ok:
... me da una humedad relativa del 100% ... Es un error de la estación ó no se trata de un valor porcentual como lo usamos habitualmente (en otra escala)?
Según la documentación ... Humidity, %
cace0353
26/02/17, 18:13:59
%WillyWeb dijo "No veo nada en la documentación sobre que sean datos estadísticos. En todas partes pone que son datos obtenidos de estaciones. :oh:"
Son previsiones para horas futuras… no puede haber datos de estación!
Por antenas, en otra aplicación que tengo, también con %LOCN me está situando correctamente con nombre de calle y n° correcto… Piensa que %LOCN no devuelve la posición de ninguna antena sino la tuya estimada, por triangulacion de las antenas que te tienen "pillado". La precisión normal, en zonas urbanas és del orden de 20 a 40 m.
Lo de la humedad, pues, debe ser un error de la estación: estamos con sol y sin nubes. No puede haber una humedad del 100%!!!
Enviat des del meu Nexus 5 usant Tapatalk
Mitrhandir
26/02/17, 18:30:43
02 (62)
A1: Obtener ubicación [ Origen:Red datos Cuenta atrás (segundos):10 Continuar tarea inmediatamente:Apagado Mantener Seguimiento:Apagado Continuar Tarea Tras Error:Encendido ]
A2: Establecer variable [ Nombre:%pos A:%LOCN Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A3: Separar variable [ Nombre:%pos Separador:, Eliminar base:Apagado ]
A4: HTTP Get [ Servidor:Puerto:http://api.openweathermap.org/data/2.5/forecast/daily?lat=%pos1&lon=%pos2&cnt=1&lang=es&units=metric&appid= Ruta: Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime: Archivo de salida: Confiar en cualquier Certificado:Apagado Continuar Tarea Tras Error:Encendido ]
A5: JavaScriptlet [ Código:json = global('HTTPD');
obj = JSON.parse(json);
var lugar = obj.city.name;
var ahora = Math.round(obj.list[0].temp.day);
var minnoche = Math.round(obj.list[0].temp.min);
var maxdia = Math.round(obj.list[0].temp.max);
var noche = Math.round(obj.list[0].temp.night);
var tarde = Math.round(obj.list[0].temp.eve);
var mañana = Math.round(obj.list[0].temp.morn);
var presion = Math.round(obj.list[0].pressure);
var humedad = obj.list[0].humidity;
var tiempo = obj.list[0].weather[0].description;
var velocidad = Math.round(obj.list[0].speed);
var direccion = obj.list[0].deg;
var nubes = obj.list[0].clouds; Librerías: Salida Automática:Encendido Cuenta atrás (segundos):45 ]
Aquí dejo mi tarea. Ahora me gustaría saber qué es cada cosa. Porque estoy hecho un lío. Porque la predicción no la veo.
Sí pongo %Mindia o %Maxdia, perfecto, pero si pongo %mindia o %maxdia no hay tu tía. Porque las demás variables son locales.
Pero estoy contento!
cace0353
26/02/17, 18:49:15
Prueba a guardar los datos en una variable local p.e. %prevision dándole sentido para ser leído:
Establecer Variable %prevision A:"Previsión metereológica para %lugar. Temperatura actual de %hora grados. Máxima de %maxdia grados. Humedad del %humedad. etc etc"
Y, a continuación, metes una acción Decir y, en texto, escribes %prevision y disfruta!
Enviat des del meu Nexus 5 usant Tapatalk
Caravantes
26/02/17, 20:45:35
Aquí dejo mi tarea. Ahora me gustaría saber qué es cada cosa. Porque estoy hecho un lío.
Esto es muy sorprendente: ¿haces una tarea y no sabes qué es cada cosa que has puesto? ¿Estás programando a lo loco para ver si suena la flauta de casualidad?
Para que sepas lo que es cada cosa, y por qué se hace cada cosa... tienes que hacer lo siguiente, como ya te dije:
A) Haz un esquema previo de la tarea, o un diagrama de flujo, o un diagrama o un borrador (llámalo como quieras).
B) Haz una lista detallada de las variables que vas a usar, con sus nombres y pensando bien la información que contendrá cada variable.
Hasta que no tengas esos dos pasos, no deberías comenzar a codificar las acciones de la tarea definitiva. Puedes hacer pequeñas tareas de prueba para ir viendo cómo resolver uno u otro paso, pero eso serían solo partes del aprendizaje, no la tarea final.
Hay quien tiene suficiente organización mental como para hacer los pasos A y B (esquema y variables) en su propia cabeza, sin necesidad de ponerlos por escrito. Esas personas pueden comenzar a codificar acciones desde el primer momento. Pero esas personas nunca dirán que "me gustaría saber qué es cada cosa, estoy hecho un lío".
Tú no tienes esa facilidad para organizarte mentalmente, y es por eso que necesitas concretar el plan paso a paso y poniéndolo todo por escrito. Pero tienes serias dificultades para hacerlo de forma disciplinada, te vence el impulso y las ganas de llegar a la meta. Vale, también es posible ir improvisando y haciendo las cosas al tun tun (ensayo y error), pero eso no es lo que pedías en el primer post de este hilo. Céntrate porfa. Y ten paciencia. Verás que el resultado es mejor.
Creo.
Mitrhandir
26/02/17, 21:10:02
:oh: Quizás no me he explicado bien!
No me refería al tema de codificar. Jolín, me siento mal por no haber dado más detalles.
Me refería a qué es cada cosa. Me explico:
var lugar = obj.city.name;
Yo sé que esto de refiere al lugar donde estoy.
Ahora bien, esta línea es muy ambigua
var ahora = Math.round(obj.list[0].temp.day);
A qué se refiere? A la temperatura actual? La temperatura media del día?
var minnoche = Math.round(obj.list[0].temp.min); Esta la tengo clara.
var maxdia = Math.round(obj.list[0].temp.max); Esta también.
var noche = Math.round(obj.list[0].temp.night); Esta habla de noche. Pero de qué noche? La actual? La de ayer? De la que viene? Lo mismo para las de abajo.
var tarde = Math.round(obj.list[0].temp.eve);
var mañana = Math.round(obj.list[0].temp.morn);
var presion = Math.round(obj.list[0].pressure); Esta la sé.
var humedad = obj.list[0].humidity; Esta también la sé.
var tiempo = obj.list[0].weather[0].description; Esta es la predicción? El estado del cielo?
var velocidad = Math.round(obj.list[0].speed); velocidad del viento
var direccion = obj.list[0].deg; dirección de las nubes.
var nubes = obj.list[0].clouds; cantidad de nubes.
Pregunto esto porque antes de ponerme a hacer más tarea, quiero tener bien claro lo que es cada cosa.
He aprendido mucho gracias a vuestra ayuda! Eso es impagable! Ahora falta aún mucho por hacer!
Un saludo y te pido disculpas Caravantes por no haberme explicado lo bastante bien.
Un saludo!
cace0353
26/02/17, 21:14:30
En %direccion tienes la dirección del viento (0° = Norte) !
Enviat des del meu Nexus 5 usant Tapatalk
El problema de openweather y de otras es de donde saca la info de la estación más cercana, un ejemplo:
Para Moncofar ¿Lo saca de Castellon de la Plana?
https://openweathermap.org/weathermap?basemap=map&cities=true&layer=temperature&lat=40.0171&lon=0.2348&zoom=10
https://openweathermap.org/city/2513700
La api da 100% humedad mientras en la consulta da el dato correcto.
Un saludo.
WillyWeb
26/02/17, 21:30:58
Aquí dejo mi tarea. Ahora me gustaría saber qué es cada cosa. Porque estoy hecho un lío. Porque la predicción no la veo.
Lo primero es que suscribo hasta la última palabra de Caravantes. Te puede el ansia por ver el resultado final y no dedicas el tiempo suficiente a entender cada parte de una tarea. Paciencia compañero, aprender a programar es un proceso que lleva su tiempo.
Por el API que estás usando la predicción es todo. Para las condiciones actuales tendrías que haber usado otro API.
Sobre tus preguntas, las respuestas deberían estar aquí...
http://www.openweathermap.org/forecast16#JSON
Y si el inglés no es tu fuerte...
https://translate.google.es/#auto/es/
Mitrhandir
27/02/17, 09:09:36
Buenos días!
Xcso, parece ser que sí. Imagino que irá parejo al nivel poblacional. A más población=más estaciones.
Caravantes y WillyWeb. No os imagináis la admiración que os tengo. Y tenéis (casi) toda la razón.
No sé si será por tener la autoestima informática baja, pero siento que soy un analfabeto. Y para superar ese analfabetismo, tengo que aplicarme más para tratar de, no llegar a vuestro nivel (muy difícil), pero sí tratar de aprender para no entorpecer vuestra magnífica labor.
Como he comentado en alguna ocasión, tengo una sordera importante, pero mira, los "profesionales médicos" dijeron que nunca hablaría, ni escribiría ni leería. Y aquí me tenéis. Dando por saco (por no decir otra cosa).
Entonces, esto forja el carácter, quieras o no. Para mí, la palabra "imposible" no existe. Para mí, que me digan "no podrás", es gasolina para mí.
Y para que veáis lo cabezón que soy, aquí dejo tarea que he hace un rato desde 0. He cometido fallos (sí, soy muy de error y ensayo), pero los he subsanado haciendo el árbol y escuadriñando el código. Veréis que no es el mismo de ayer.
Un saludo!
0Openweather (12)
A1: Obtener ubicación [ Origen:Red datos Cuenta atrás (segundos):10 Continuar tarea inmediatamente:Apagado Mantener Seguimiento:Apagado Continuar Tarea Tras Error:Encendido ]
A2: Establecer variable [ Nombre:%pos A:%LOCN Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A3: Separar variable [ Nombre:%pos Separador:, Eliminar base:Apagado ]
A4: HTTP Get [ Servidor:Puerto:http://api.openweathermap.org/data/2.5/forecast?lat=39.82512724&lon=-0.16198443&cnt=1&lang=es&units=metric&APPID=247a6501c1fd7618ca947cf05acce72f Ruta: Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime: Archivo de salida: Confiar en cualquier Certificado:Apagado Continuar Tarea Tras Error:Encendido ]
A5: JavaScriptlet [ Código:json = global('HTTPD');
obj = JSON.parse(json);
var lugar = obj.city.name;
var ahora = Math.round(obj.list[0].main.temp);
var minnoche = Math.round(obj.list[0].main.temp.min);
var maxdia = Math.round(obj.list[0].main.temp.max);
var presion = Math.round(obj.list[0].main.pressure);
var nivel = Math.round(obj.list[0].main.sea_level);
var humedad = obj.list[0].main.humidity;
var tiempokf = obj.list[0].main.temp_kf;
var descripcion = obj.list[0].weather[0].description;
var nubes = obj.list[0].clouds;
var viento = obj.list[0].wind;
var velviento = obj.list[0].wind.speed;
var dirviento = obj.list[0].wind.deg;
var lluvia = obj.list[0].rain; Librerías: Salida Automática:Encendido Cuenta atrás (segundos):45 ]
A6: [X] Pop-Up [ Título: Texto:Estoy en %lugar Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A7: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A8: [X] Pop-Up [ Título: Texto:La temperatura es %ahora Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A9: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A10: [X] Pop-Up [ Título: Texto:La temperatura mínima es %MinDia Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A11: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A12: [X] Pop-Up [ Título: Texto:La temperatura máxima es %MaxDia Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A13: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A14: [X] Pop-Up [ Título: Texto:La presión atmosférica es de %presion Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A15: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A16: [X] Pop-Up [ Título: Texto:Estás a %nivel metros sobre el nivel del mar. Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A17: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A18: [X] Pop-Up [ Título: Texto:La humedad es de %humedad Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A19: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A20: [X] Pop-Up [ Título: Texto:%tiempokf Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A21: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A22: [X] Pop-Up [ Título: Texto:El %Descripcion Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A23: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A24: [X] Pop-Up [ Título: Texto:%nubes Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A25: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A26: Pop-Up [ Título: Texto:%viento Imagen de fondo: Disposición:Popup Cuenta atrás (segundos):3 Mostrar sobre bloqueo pantalla:Encendido ]
A27: [X] Esperar [ MS:573 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A28: [X] Pop-Up [ Título: Texto:La velocida....
WillyWeb
27/02/17, 15:07:43
Caravantes y WillyWeb. No os imagináis la admiración que os tengo. Y tenéis (casi) toda la razón.
Por la parte que me toca, muchas gracias. Particularmente nunca he pretendido reconocimiento ni creo que lo merezca. Estoy aquí por "deporte" y ayudo en lo que puedo, nada más. :D
... Para mí, la palabra "imposible" no existe. Para mí, que me digan "no podrás", es gasolina para mí.
Ya conocía la situación y tu determinación es admirable. Eso juega muy a tu favor, pero sólo con eso no es suficiente. Programar requiere, entre otras cosas, organización, método, disciplina y tiempo de estudio. Son cualidades que casi cualquiera pueden cultivar con la dedicación oportuna, y no creo que tú seas un excepción.
Y ahora te hablo con todo el cariño, no seas impaciente y haz un intento por organizar tus ideas antes de tirarte a la piscina. Es importante tener claro lo que se quiere hacer. Recuerda los consejos que te ha dado Caravantes, ya te he dicho que son oro puro. ;-)
Y para que veáis lo cabezón que soy, aquí dejo tarea que he hace un rato desde 0. He cometido fallos (sí, soy muy de error y ensayo), pero los he subsanado haciendo el árbol y escudriñando el código. Veréis que no es el mismo de ayer.
Ok. Borrón y cuenta nueva. Ahora mismo no me puedo entretener, pero en un rato reviso esa tarea y te doy mis impresiones. :ok:
Caravantes
27/02/17, 17:07:26
aquí dejo tarea que he hace un rato desde 0.
En mi opinión, sería mejor que organizaras toda la información de salida en variables de una matriz, al estilo de lo siguiente:
Establecer variable %salida1 a La temperatura mínima es %MinDia
Establecer variable %salida2 a La temperatura máxima es %MaxDia
Establecer variable %salida3 a La presión atmosférica es de %presion
Establecer variable %salida4 a Estás a %nivel metros sobre el nivel del mar
etc.
Luego puedes hacer un bucle para concatenar todos esos resultados en una variable final conjunta y/o pasar cada elemento de la matriz por un PopUp dentro del bucle. Tras todo eso, finalmente podrás poner la acción Decir que vocalice de una sola vez esa variable final que ya contiene todo el texto.
Creo que hubiera sido preferible planificar previamente estos detalles, mediante un esquema de la tarea, como te sugerí mas de una vez.
Veamos otros problemillas:
[Nota: cuando el servidor del foro ve una letra x seguida de una letra D lo interpreta como una risa, y muestra el smiley xD . Eso hace que algunas variables o expresiones como %Max Dia (interpongo un espacio) sean mostradas como %MaxDia si no interpongo el espacio. La forma de evitar ese problema es utilizar el sistema CODE (código), como he hecho hace un momento. Aunque los siguientes párrafos no son código, tengo que seguir utilizando ese sistema CODE para que no veáis cosas raras, porque voy a seguir hablando de esa variable %Max Dia ]
- Estás utilizando algunas variables locales (%presion) y otras globales (%MaxDia).
Creo preferible usar solamente las locales,
no tienes necesidad de complicarte con las globales.
- Esa variable %MaxDia la escribes así (con algunas mayúsculas) en A12,
pero la escribes con minúsculas (maxdia) en el JavaScriplet de A5.
No va a funcionar, Tasker considera que son dos variables distintas.
Tienes que escribir siempre igual cada variable.
- En A10 haces un Pop-Up mostrando el contenido de la variable %MinDia,
pero esa variable no la has cargado previamente, no le has asignado ningún valor,
no aparece en otras acciones de la tarea.
Creo que minimizarías la probabilidad de algunos de estos errores si hicieras un listado preciso de las variables a usar, como te sugerí más de una vez.
Mitrhandir, entiendo perfectamente que puedas tener tus motivos o tu carácter, y que eso te lleve a hacer las cosas a tu manera, olvidando reiteradamente mis sugerencias (mis mensajes #3 #19 #70, por ejemplo), incluso a pesar de que Willy también avalaba mis propuestas (sus mensajes #16 #20 #76). Respeto tu manera de hacer. Entiende tú también que yo no tenga muchas ganas de seguir haciéndote sugerencias y aportaciones, tras haber visto que muchas veces han caído en saco roto. No estoy enfadado ni disgustado, en ninguna medida. Simplemente constato que tenemos dos maneras muy distintas de enfocar el asunto y me parece muy difícil coordinar ambas visiones.
[Si quieres leer un mensaje mío estando disgustado, mira aquí: http://www.htcmania.com/showpost.php?p=13091725&postcount=8 ]
Mitrhandir, te pido que sigas participando en el foro igual que hasta ahora, o como mejor te parezca. Me incomodaría que no lo hicieras, porque creo que tu presencia enriquece el foro y creo que tu comportamiento no es ningún problema para el colectivo; solo es un desencuentro personal entre tú y yo. Creo que la mejor forma de resolverlo es que yo deje de responder (quizá no totalmente) en las consultas que tú hagas. Buena suerte.
WillyWeb
27/02/17, 18:56:00
Esta es tu nueva propuesta...
0Openweather (12)
A1: Obtener ubicación [ Origen:Red datos Cuenta atrás (segundos):10 Continuar tarea inmediatamente:Apagado Mantener Seguimiento:Apagado Continuar Tarea Tras Error:Encendido ]
A2: Establecer variable [ Nombre:%pos A:%LOCN Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A3: Separar variable [ Nombre:%pos Separador:, Eliminar base:Apagado ]
A4: HTTP Get [ Servidor:Puerto:http://api.openweathermap.org/data/2.5/forecast?lat=39.82512724&lon=-0.16198443&cnt=1&lang=es&units=metric&APPID=247a6501c1fd7618ca947cf05acce72f Ruta: Atributos: Cookies: User Agent: Cuenta atrás:10 Tipo Mime: Archivo de salida: Confiar en cualquier Certificado:Apagado Continuar Tarea Tras Error:Encendido ]
A5: JavaScriptlet [ Código:json = global('HTTPD');
obj = JSON.parse(json);
var lugar = obj.city.name;
var ahora = Math.round(obj.list[0].main.temp);
var minnoche = Math.round(obj.list[0].main.temp.min);
var maxdia = Math.round(obj.list[0].main.temp.max);
var presion = Math.round(obj.list[0].main.pressure);
var nivel = Math.round(obj.list[0].main.sea_level);
var humedad = obj.list[0].main.humidity;
var tiempokf = obj.list[0].main.temp_kf;
var descripcion = obj.list[0].weather[0].description;
var nubes = obj.list[0].clouds;
var viento = obj.list[0].wind;
var velviento = obj.list[0].wind.speed;
var dirviento = obj.list[0].wind.deg;
Parece que esta vez has usado el API "5 day / 3 hour forecast". En estas páginas están los detalles de lo que ofrece...
http://www.openweathermap.org/forecast5
http://www.openweathermap.org/weather-data
http://www.openweathermap.org/weather-conditions
Lo que has hecho no está mal del todo, pero creo que se puede organizar un poco mejor para que sea más fácil de mantener/entender. :rolleyes:
Obtener la ubicación
A1: Obtener ubicación [ Origen:Red datos Continuar tarea inmediatamente:Encendido ]
A2: Establecer variable [ Nombre:%locn A:%LOCN ]
A3: Separar variable [ Nombre:%locn Separador:, ]
Con eso tenemos %locn1 con la latitud y %locn2 con la longitud de las coordenadas del dispositivo. La idea es usar esa variables en el sitio adecuado de la llamada al API. En tu propuesta creas unas variables equivalente y luego no las usas (pones unas coordenadas fijas). Y atento al "continuar tarea inmediatamente". Este tipo de ubicación no requiere tiempo extra para conseguir fijar una posición, al menos en las versiones de Android que la he probado (4.2 y 5.x.x). Si no te funciona así quita esa marca y ajusta el tiempo a 10 segundos (el mínimo posible).
Consultar el API
A4: HTTP Get [ Servidor: Puerto:api.openweathermap.org
Ruta: data/2.5/forecast
Atributos: lat=%locn1
lon=%locn2
cnt=1
lang=es
units=metric
appid=93dc7ed2abd2de8255098818c88cbd6b ]
El resultado de esa consulta (un archivo en formato JSON (https://es.wikipedia.org/wiki/JSON)) se almacena automáticamente en la variable global %HTTPD.
Procesar el JSON
A5: JavaScriptlet [ Código:<JS> Librerías: Salida Automática:Encendido Cuenta atrás (segundos):45 ]
Y en <JS> metes esto...
//DATOS DEL API
json=global('HTTPD');
json=json.replace(/3h/g,'hhh');
obj=JSON.parse(json);
var city=obj.city.name;
var lat=obj.city.coord.lat;
var lon=obj.city.coord.lon;
var country=obj.city.country;
var population=obj.city.population;
lm=obj.list[0].main;
var temp=lm.temp;
var temp_min=lm.temp_min;
var temp_max=lm.temp_max;
var pressure=lm.pressure;
var humidity=lm.humidity;
lw=obj.list[0].weather[0];
var weather=lw.main;
var description=lw.description;
var icon=lw.icon;
l0=obj.list[0];
var dt_seg=l0.dt;
var dt_txt=l0.dt_txt;
var wind_speed=l0.wind.speed;
var wind_deg=l0.wind.deg;
var clouds=l0.clouds.all;
try {var rain=l0.rain.hhh;}
catch(err) {var rain='0';}
try {var snow=l0.snow.hhh;}
catch(err) {var snow='0';}
//DATOS PROCESADOS
var tact=Math.round(temp);
var tmin=Math.round(temp_min);
var tmax=Math.round(temp_max);
var press=Math.round(pressure);
var humed=Math.round(humidity);
var icono='http://openweathermap.org/img/w/'+icon+'.png';
var wind_kxh=Math.round(wind_speed/1000*3600);
dirs='norte,nornordeste,nordeste,estenordeste,este ,estesudeste,sudeste,sudsudeste,sur,sudsudoeste,su doeste,oesudoeste,oeste,oesnoroeste,noroeste,norno roeste,norte'.split(',');
dir=Math.round(wind_deg/22.5);
var wind_dir=dirs[dir];
Con eso tienes los valores más relevantes del JSON disponibles en la tarea para que los uses de la forma que te parezca. Además de los datos originales también tienes otros "procesados" a partir de ellos. Todas las variables definidas en el código JS con la instrucción "var" están disponibles en la tarea de Tasker como variables locales.
Sobre esto unas aclaraciones...
He usado nombres de variables semejantes a las propiedades del JSON para mantener la coherencia. Lo de "minnoche" y "maxdia" da a entender un uso de esos valores que no aparece en la documentación. También has mezclado variables locales con globales, y en algunos casos las usas sin darles valor previamente (por eso te fallan cosas).
He observado que "JSON.parse()" no acepta nombres de propiedades que comienzan con un número. Para solucionarlo he añadido esa instrucción "replace" que cambia los "3h" por "hhh" (esos "3h" aparecen como parte del dato de lluvia o nieve).
Los datos de lluvia y nieve (rain y snow) no aparecen siempre. He añadido un pequeño control de errores para evitar que el código se pare en esos casos.
Componer la frase final
El contenido final de esa frase es cosa tuya. Aquí está mi propuesta...
Se prevé %description en %city. La temperatura es de %tact grados aunque puede variar de %tmin a %tmax. La humedad es del %humidity por ciento. Sopla viendo del %wind_dir a %wind_kxh kilómetros hora.
# Posibles mejoras #
Procesar la variable %wind_speed para decidir si se añade esa información a la salida (con poco viento se podría quitar).
Procesar la variable %wind_deg para convertirla a puntos cardinales (N, S, E, O) <<< realizado
Procesar %rain, %snow y %clouds por si aportan algo interesante (eso requiere hacer pruebas y estudiar la documentación).
Crear una notificación permanente con los datos más relevantes y el %icon de la previsión.
Añadir a la frase la hora para la que se ha hecho la predicción (%dt_txt).
...
Contando con que añadas una acción más para "decir" la frase final la tarea no necesita más de 6 acciones. Parafraseando al genial René Lavand ...
"no se puede hacer más lento (https://www.youtube.com/watch?v=xI_uFpp-hy8)"
... creo que, no se puede hacerlo más fácil. :rolleyes:
Mitrhandir
27/02/17, 19:04:17
Caravantes! Ni se te ocurra dejar de decirme las cosas! Pero qué desencuentro hombre? Por mi parte yo estoy encantado contigo! Reconozco muy a mi pesar que tengo esa manía/defecto de ir a mi p... bola :risitas: , pero quiero llegar a un acuerdo contigo. Yo me comprometo a hacer todo lo que me dices, y tú sigues la voz de mi conciencia. Ok?
Me fastidiaría y mucho que dejaras de "darme" collejas. Soy un ansias y estoy dispuesto a cambiar.
Sobre lo que comentas de las variables, las quiero hacer locales, pero en concreto %Max dia y %Min dia sólo salen correctamente en el pop-up así (mayúsculas). Tendré que borrar en el apartado "variables" esas variables.
Hacemos trato? :besito:
...
Contando con que añadas una acción más para "decir" la frase final la tarea no necesita más de 6 acciones. Parafraseando al genial René Lavand ...
"no se puede hacer más lento (https://www.youtube.com/watch?v=xI_uFpp-hy8)"
... creo que, no se puede hacerlo más fácil. :rolleyes:
Grande Rene Lavand que pena que nos dejó, soy un apasionado a la magia y ese video es un clásico de la cartomagia.
Un saludo.
WillyWeb
27/02/17, 20:34:48
Grande Rene Lavand que pena que nos dejó, soy un apasionado a la magia y ese video es un clásico de la cartomagia.
Como a él le gustaba decir, era lentidigitador, y el mejor con mucha diferencia. ;-)
Mitrhandir
28/02/17, 06:49:32
Buenos días!
WillyWeb, acabo de transcribir tu tarea y he detectado un pequeño error. Está en A5 casi al final.
Por lo demás, me dejas alucinado. Ahora entiendo porqué Caravantes insiste tanto en el planteamiento, la disciplina y la pulcritud.
Te comento la tarea:
-El pop-up de %presure me arroja "nan" ¿Qué significa?
-%rain y %snow me salen tal cual, pero creo que si no hay lluvia ni nieve, el valor debería de ser 0, como por ejemplo en el caso de %clouds.
-Lo de las coordenadas en la url ya está corregido.
-Respecto a lo de %wind_speed, no lo veo mal, pero estoy viendo que los valores no se ajustan a la realidad. Me explico: Me dice %wind_speed que la velocidad del viento es 9. Salgo a la calle y no sopla ni una brizna de aire. O la tarea de ayer, que me decía que la altitud era de 1029 metros cuando prácticamente estoy a nivel del mar.
Curiosamente, tengo instalada la app Weather Timeline, que puede usar varias bases de datos (Weather Undergroung, Openweather, etc...) y estoy usando la de Openweather. Los resultados son distintos. (en un principio quería hacer esta tarea intents mediante).
-Lo de %wind_deg no lo veo complicado. %wind_deg se podría separar en %win_deg1, %wind_deg2, %wind_deg3 y %wind_deg4 y asociar valores (0 es norte, 250 es este, 500 es sur y 750 es oeste), e incluso separar en 8 para norte, noroeste, este, sureste, sur, suroeste, oeste y noreste.
-Estoy mosca con lo de %rain y %snow, pero sí sería interesante que saliera una notificación en caso de que %rain o %snow tuvieran el valor de 60/70% o en el caso de %clouds que saliera si el valor fuera 100%.
-Para la notificación no tengo ni idea de cómo hacer. (Nunca lo he hecho)
Un saludo! :cucu:
WillyWeb
28/02/17, 08:29:08
WillyWeb, acabo de transcribir tu tarea y he detectado un pequeño error. Está en A5 casi al final.
Por lo demás, me dejas alucinado. Ahora entiendo porqué Caravantes insiste tanto en el planteamiento, la disciplina y la pulcritud.
Es cosa de organizar las ideas. Y ese error ... podría ser. Dime dónde. :oh:
-El pop-up de %presure me arroja "nan" ¿Qué significa?
Not-A-Number (No es Un Número).
Eso me pasa por programar en el móvil :( ... Yo ya he visto el error. ¿No lo ves tú? ;-)
-%rain y %snow me salen tal cual, pero creo que si no hay lluvia ni nieve, el valor debería de ser 0, como por ejemplo en el caso de %clouds.
Parece que rain y snow son opcionales. El API funciona así y si quieres otro resultado lo tendrás que solucionar tú a base de código.
-Respecto a lo de %wind_speed, no lo veo mal, pero estoy viendo que los valores no se ajustan a la realidad. Me explico: Me dice %wind_speed que la velocidad del viento es 9. Salgo a la calle y no sopla ni una brizna de aire. O la tarea de ayer, que me decía que la altitud era de 1029 metros cuando prácticamente estoy a nivel del mar.
La velocidad del viento se proporciona en metros/segundo. Para pasarla a K/h...
%wind_kxh=%wind_speed/1000x3600
Sobre la precisión del valor note puedo decir nada.
Y ese "1029" no es la altitud, es la presión atmosférica a nivel del mar, en milibares con "units=metric".
Curiosamente, tengo instalada la app Weather Timeline, que puede usar varias bases de datos (Weather Undergroung, Openweather, etc...) y estoy usando la de Openweather. Los resultados son distintos. (en un principio quería hacer esta tarea intents mediante).
¿Y qué espera sacar mediante intents? ¿Esa aplicación devuelve valores que puedas utilizar cono hace el API?
-Lo de %wind_deg no lo veo complicado. %wind_deg se podría separar en %win_deg1, %wind_deg2, %wind_deg3 y %wind_deg4 y asociar valores (0 es norte, 250 es este, 500 es sur y 750 es oeste), e incluso separar en 8 para norte, noroeste, este, sureste, sur, suroeste, oeste y noreste.
¿Para qué quieres crear todas esas variables? Tienes %wind_deg con un número y necesitas una nueva variable (%wind_dir) con su traducción a palabras. Si tienes ocho "direcciones" (n/s/e/o/ne/se/so/no) necesitas ocho IF...
IF %wind_deg>337 AND %wind_deg<23 %wind_dir="norte"
IF %wind_deg>22 AND %wind_deg<68 %wind_dir="nordeste"
IF %wind_deg>67 AND %wind_deg<113 %wind_dir="este"
...
...
He repartido los 360º entre las ocho direcciones y salen a 45º. Poniendo en los IF la mitad (23º redondeando) a cada lado de la posición central de la "dirección" correspondiente te aseguras que todos los valores de grados tienen su traducción a palabras.
-Estoy mosca con lo de %rain y %snow, pero sí sería interesante que saliera una notificación en caso de que %rain o %snow tuvieran el valor de 60/70% o en el caso de %clouds que saliera si el valor fuera 100%.
No es mala idea ... adelante con ello. :silbando:
-Para la notificación no tengo ni idea de cómo hacer. (Nunca lo he hecho)
Pues no te metas con eso. Es sólo una sugerencia.
Mitrhandir
28/02/17, 10:24:52
Es cosa de organizar las ideas. Y ese error ... podría ser. Dime dónde.
-Está al final. Una doble paréntesis.
Eso me pasa por programar en el móvil ... Yo ya he visto el error. ¿No lo ves tú?
-Voy a mirar. Luego edito.
Parece que rain y snow son opcionales. El API funciona así y si quieres otro resultado lo tendrás que solucionar tú a base de código.
-Claro hombre, como soy experto en Javascript, lo hago con los ojos cerrados! :risitas:
La velocidad del viento se proporciona en metros/segundo. Para pasarla a K/h...
%wind_kxh=%wind_speed/1000x3600
- Establecer variable %win_speed A %wind_kxh=%wind_speed/1000x3600 Calcular encendido.
Y ese "1029" no es la altitud, es la presión atmosférica a nivel del mar, en milibares con "units=metric".
- :oh:
¿Y qué espera sacar mediante intents? ¿Esa aplicación devuelve valores que puedas utilizar cono hace el API?
-Pues la verdad es que el tema de intents me seduce. Espero sacar mucha información aprovechable. Ésa es el quid de la cuestión! Cómo puedo saber si una aplicación puede interactuar intents mediante. He leído sobre el tema. Pero vamos a dejarlo aparte y después de las Fallas, abriré tema nuevo. Así os doy vacaciones. :risitas:
¿Para qué quieres crear todas esas variables? Tienes %wind_deg con un número y necesitas una nueva variable (%wind_dir) con su traducción a palabras. Si tienes ocho "direcciones" (n/s/e/o/ne/se/so/no) necesitas ocho IF...
IF %wind_deg>337 AND %wind_deg<23 %wind_dir="norte"
IF %wind_deg>22 AND %wind_deg<68 %wind_dir="nordeste"
IF %wind_deg>67 AND %wind_deg<113 %wind_dir="este"
...
...
He repartido los 360º entre las ocho direcciones y salen a 45º. Poniendo en los IF la mitad (23º redondeando) a cada lado de la posición central de la "dirección" correspondiente te aseguras que todos los valores de grados tienen su traducción a palabras.
-Ok. No había caído en esa forma de hacerlo
No es mala idea ... adelante con ello.
-Sí, primero tengo que hacer lo de arriba. :rolleyes:
Pues no te metas con eso. Es sólo una sugerencia.
-No tenía pensado hacerlo. Pero un día habrá que hacerlo.
Un saludo! :cucu::dios:
WillyWeb
28/02/17, 10:39:35
-Está al final. Una doble paréntesis.
Era eso, no busques más.
Parece que rain y snow son opcionales. El API funciona así y si quieres otro resultado lo tendrás que solucionar tú a base de código.
-Claro hombre, como soy experto en Javascript, lo hago con los ojos cerrados! :risitas:
¿Pero qué pasa, es que no has aprendido nada de JavaScript con lo que llevamos hecho? :loco:
Dame un rato que casi lo tengo resuelto.
- Establecer variable %win_speed A %wind_kxh=%wind_speed/1000x3600 Calcular encendido.
No. Establecer variable: %win_kxh A: %wind_speed/1000x3600 Calcular: Encendido.
-Pues la verdad es que el tema de intents me seduce. Espero sacar mucha información aprovechable...
Pues deberías empezar por leer esto...
http://www.htcmania.com/showthread.php?p=9209962
cace0353
28/02/17, 10:57:51
Para obtener las direcciones de los vientos en formato legible lo tienes mejor (y mas completo con 16 orientaciones) de la siguiente manera:
EDITADO
Ver 5 post más adelante la solución correcta...
WillyWeb
28/02/17, 11:36:40
Para obtener las direcciones de los vientos en formato legible lo tienes mejor (y mas completo con 16 orientaciones) de la siguiente manera:
Había pensado en ello, pero ese planteamiento tiene un pequeño defecto al que no dediqué tiempo para encontrarle una solución. Me explico... :rolleyes:
El reparto de nombres se inicia en cero grados de forma que "norte" correspondería a los valores 0 a 22.5 cuando lo correcto es que fuese de 348.75 a 11.25 y así sucesivamente.
Ahora que pienso en ello de nuevo he visto que no es complicado "parchear" la dirección para corregir esa pequeña desviación y poder hacer uso del sistema que propones.
:ok:
WillyWeb
28/02/17, 11:44:46
(en %dirección te quedará un valor entre 0 y 16)
Establecer Variable %vientos A: Norte;Nor Noreste;NorEste;Este Noreste;Este;Este SurEste;Sureste;Sur SurEste;Sur;Sur SurOeste;SurOeste;Oeste SurOeste;Oeste;Oeste NorOeste;NorOeste;Nor Noroeste
:oh: Ahora que me fijo mejor, te salen 17 valores y no deberían ser más que 16 ... algo falla.
cace0353
28/02/17, 11:49:01
:oh: Ahora que me fijo mejor, te salen 17 valores y no deberían ser más que 16 ... algo falla.
Hay 16… (ya había quitado editando el Norte del final!)
EDITO DE NUEVO: Aún hay errores! buscando solución...
Enviat des del meu Nexus 5 usant Tapatalk
WillyWeb
28/02/17, 12:00:24
Entre el 0 y el 16 tienes 17 valores. Lo correcto sería entre 0 y 15. :rolleyes:
cace0353
28/02/17, 12:59:45
Entre el 0 y el 16 tienes 17 valores. Lo correcto sería entre 0 y 15. :rolleyes:
Creo que ya lo tengo
Si tu valor obtenido de dirección del viento es %direccion:
Establecer variable %direccion A: round(%direccion/22.5)+1 Calcular:Activado
(en %dirección te quedará un valor entre 1 y 17)
Para un angulo pequeño p.e. 2º %direccion toma el valor 1 del array, es decir "Norte"
Para un ángulo próximo a 360% p.e. 355º %direccion valdrá 16+1 = 17, "Norte" también.
Para un ángulo intermedio p.e. 137º %direccion valdrá 6+1 = 7, o sea "Sur Este"
Establecer Variable %vientos A: Norte;Nor Noreste;NorEste;Este Noreste;Este;Este SurEste;Sur Este;Sur SurEste;Sur;Sur SurOeste;SurOeste;Oeste SurOeste;Oeste;Oeste NorOeste;NorOeste;Nor Noroeste;Norte
Separar variable %vientos Separador ;
Establecer variable %direccion A: %vientos(%direccion)
(En %direccion te quedará entonces el valor correspondiente del array %vientos)
En una sola acción JavaScriplet:
var vientos ="Norte;Nor Noreste;NorEste;Este Noreste;Este;Este SurEste;Sur Este;Sur SurEste;Sur;Sur SurOeste;SurOeste;Oeste SurOeste;Oeste;Oeste NorOeste;NorOeste;Nor Noroeste;Norte";
direccion = Math.round(direccion/22.5);
vientos = (vientos.split(";"));
direccion = vientos[direccion];
WillyWeb
28/02/17, 13:56:42
Creo que ya lo tengo...
Eso no soluciona el problema que te comentaba al principio. :rolleyes:
Los 22.5º están centrados en cada dirección, es decir 11.25º a cada lado. Según eso la dirección "este", por poner un ejemplo, debería ser asignada a cualquier valor de grados entre 78.75 y 101.25 ... vemos que pasa con ese algoritmo que propones.
para 80º ... round(80/22.5)+1=4 ... este noreste ... error
para 90º ... round(90/22.5)+1=5 ... este ... correcto
para 101º ... round(100/22.5)+1=5 ... este ... correcto
para 102º ... round(100/22.5)+1=5 ... este ... error
Ya te lo había dicho. Ese sistema tiene un "pequeño" defecto. :silbando:
Lo he escrito un poco rápido, pero creo que esta propuesta en JavaScript funciona correctamente en todos los casos...
dirs='nornordeste,nordeste,estenordeste,este,estes udeste,sudeste,sudsudeste,sur,sudsudoeste,sudoeste ,oesudoeste,oeste,oesnoroeste,noroeste,nornoroeste ,norte'.split(',');
dir=wind_deg-11.25;if(dir<0){dir=360+dir};
dir=Math.round(dir/22.5);
var wind_dir=dirs[dir];
El valor "wind_deg" contiene el valor en grados de la dirección del viento y el valor "wind_dir" contiene la dirección en palabras. Los nombres los he sacado de la Wikipedia (https://es.wikipedia.org/wiki/Rosa_de_los_vientos).
cace0353
28/02/17, 14:36:23
WillyWeb, has probado la acción JS que he puesto?
He estado probándola con los ángulos que pones y me da la solución correcta.
Ya he borrado la que tenía en Tasker puro…
En cuanto a la nomenclatura, quizás no sea la ortodoxa, pero en una acción Decir se entiende más clara y, en lectura se ve mejor…
Enviat des del meu Nexus 5 usant Tapatalk
WillyWeb
28/02/17, 15:01:19
WillyWeb, has probado la acción JS que he puesto?
El problema que te he comentado antes (la dirección no está centrada en su valor) también ocurre en la versión en JavaScript pero el error será visible con otros valores.
para 77º ... round(77/22.5)=3 ... Este Noreste ... bien
para 80º ... round(80/22.5)=3 ... Este Noreste ... mal (debería ser Este)
*Recuerda que los índices de un array en Tasker comienzan en 1 y en JS en 0.
cace0353
28/02/17, 15:07:16
para 80º ... round(80/22.5)=3 ... Este Noreste ... mal (debería ser Este)
Lo acabo de probar y a mí me da, en mi JS, Este, no Este NorEste como dices... (Otro "misterio de Moncófar") :loco:
Acabo de mirar tu comentario y 80/22.5 = 3.555... por tanto "round" (redondeo al entero más próximio) da 4, no 3! Esto és, el 4º valor de la lista = Este
Por supuesto que los arrays empiezan en [0], por esto no pongo el +1 como ponia en Tasker...
WillyWeb
28/02/17, 16:01:36
Ya he visto dónde me estaba equivocando :(
He estado haciendo las cuentas a mano y en vez de redondear al entero más próximo he truncado la parte decimal.
Efectivamente, tu algoritmo JS funciona correctamente con ese pequeño truco de hacer el array "circular" añadiendo al final el mismo valor del principio.
En mi planteamiento me limitaba a los 16 valores posibles (de 0 a 15) y está claro que no hacía falta.
:ok:
danko9696
28/02/17, 16:20:02
-Claro hombre, como soy experto en Javascript, lo hago con los ojos cerrados!
Una pequeña crítica: en mi opinión, si el objetivo era aprender deberías haber practicado primero con JS, convirtiendo tareas ya hechas cuyo funcionamiento comprendas perfectamente. En lugar de meterte de golpe con localización, json, api, httpget, JS, etc...
Mitrhandir
28/02/17, 16:30:00
Danko, toda la razón.
Mitrhandir como un elefante en una cacharrería. Típico de mí. :sisi1:
WillyWeb
28/02/17, 17:16:18
Una pequeña crítica ...
Hombre, si quieres hacer una tarea que te proporcione la predicción del tiempo en tu ubicación ya me dirás cómo haces para no usar HTTPGet y ubicaciones. Puesto que no queda otra que usar datos de la red, mejor con el API de un sitio especializado que tirando del HTML de una web y luego "trocearlo" con 20 o 30 acciones para sacar los cuatro datos que necesitas... ¿no te parece? :oh:
Y procesar el JSON que devuelve el API con JavaScript ha sido cosa mía, pero también puede ser "entretenido" sacar los datos usando sólo acciones de Tasker ... ¿voluntarios? ;-)
danko9696
28/02/17, 18:01:05
Hombre, si quieres hacer una tarea que te proporcione la predicción del tiempo en tu ubicación ya me dirás cómo haces para no usar HTTPGet y ubicaciones. Puesto que no queda otra que usar datos de la red, mejor con el API de un sitio especializado que tirando del HTML de una web y luego "trocearlo" con 20 o 30 acciones para sacar los cuatro datos que necesitas... ¿no te parece? :oh:
Y procesar el JSON que devuelve el API con JavaScript ha sido cosa mía, pero también puede ser "entretenido" sacar los datos usando sólo acciones de Tasker ... ¿voluntarios? ;-)
Según entiendo el objetivo no era la funcionalidad que citas sino aprender. Y para aprender, en lugar de meterse con todo esto a saco mi punto es que habría sido mejor practicar con JS (entre otras cosas), convirtiendo y mejorando scripts propios para coger soltura en varios aspectos, tanto con consejos de este hilo como en tutoriales del subforo.
WillyWeb
28/02/17, 18:14:20
Bueno, Caravantes dejó clara la forma de abordar un proyecto en su primer post. Y Mitrhandir ya te ha contestado.
¿Qué más quieres que te diga? :oh:
WillyWeb
28/02/17, 19:03:35
He modificado el código JS del post #78 (http://www.htcmania.com/showthread.php?p=25797710#post25797710) para solucionar lo de esos valores de rain y snow que no siempre están en la predicción. También he añadido la conversión de velocidad del viento a k/h y la traducción de direcciones (gracias cace :ok:).
Con esto me retiro del proyecto. :cucu:
Mitrhandir
28/02/17, 19:44:15
No, sí yo también voy a retirarme, pero totalmente.
Aprenderé cuando alguien pregunte, o si no, tiraré de San Google.
Gracias WillyWeb.
Pasando a la materia gris...
Mx WaR HaBiB
09/03/17, 19:25:28
Mitrhandir
podrías dar un resumen de como quedo tu Perfil?
he leído las 6 Pag. y solo la veo en partes... yo también soy muy Noob en el tema pero me interesa saber que seguimiento le diste.
Un Saludo!
WillyWeb
09/03/17, 19:29:40
Como he comentado en el post #102, está completo en el post #78.
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.