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

Respuesta
 
Herramientas
  #1  
Viejo 07/11/21, 17:14:04
Array

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
Los precios de la electricidad, hora a hora.

Ya sabéis que el precio de la electricidad ha subido mucho. Y además nos marean porque cada hora tiene un precio distinto, sin que tenga validez alguna aquello que planteó el gobierno sobre los tramos "valle", "llano" y "punta". No sabemos a qué hora es razonable poner la lavadora o el radiador.

En la siguiente página de Red Eléctrica se puede ver una gráfica con los distintos precios que nos cobran, cada hora, por el consumo eléctrico. Se puede consultar el día actual, los días anteriores, y a partir de las 21 horas también se puede consultar el día siguiente.
https://www.esios.ree.es/es/pvpc

La propuesta es que Tasker obtenga esos datos para ayudarnos a gestionar mejor nuestros consumos eléctricos. Creo que este asunto puede interesar a más personas, y me gustaría que fuese un proyecto colectivo, no solo mío.

La idea de partida puede ser que Tasker consulte los precios cada día, a las 00:01, para hacer una tabla de 24 elementos, con el precio de cada hora. Luego ya iremos viendo la forma de gestionar óptimamente estos datos.

Por ejemplo, se podrían ordenar los precios de más bajo a más alto, como hace https://www.apaga-luz.com Además, por la mañana, Tasker podría sacarnos un aviso indicando cuál es la mejor hora para poner la lavadora, excluyendo las horas en que duermo o que no estoy en casa; quizá convendría añadir al aviso la sugerencia de dejar la lavadora para el día siguiente si no hay ninguna hora conveniente con precio barato. También podría establecerse un precio máximo admisible, y un enchufe inteligente apagaría los radiadores eléctricos si el precio de la hora actual está por encima de ese máximo. Por el contrario, se podría elegir la hora más barata de la mañana y la hora más barata de la tarde para que Tasker encendiera el termo eléctrico esas dos horas concretas, y mantenerlo apagado el resto del día. Quien tenga patinete o coche eléctrico podrá elegir las mejores horas para recargarlo. Y más cosas similares, según la necesidad de cada uno.

Habrá que estudiar cómo puede Tasker transmitir las órdenes de encendido/apagado a los enchufes inteligentes; quizá a través de Google-home, Alexa u otros sistemas. Sobre este asunto no tengo ninguna experiencia ni idea de como abordarlo. Tal vez haya que investigar, estudiar y hacer pruebas. O puede que algún compañero aporte su conocimiento para avanzar más rápido.

Pero el primer problema es encontrar un sitio de donde obtener los precios de la electricidad y que esos datos tengan un formato fácil de manejar.

De momento he visto que los datos diarios (del día actual) se pueden consultar en
https://api.esios.ree.es/archives/70...json?locale=es
Por la URL deduzco que los datos están en formato JSON.
Hay un montón de datos para cada hora del día. Creo que el dato PCB es el precio para la Península, Canarias y Baleares; y el precio CYM supongo que sea para Ceuta Y Melilla, que tienen un precio especial, distinto en algunos momentos. No sé lo que hay en el resto de los datos, pero creo que carece de interés para este planteamiento.

La API que tiene Red Eléctrica ofrece muchas más opciones, pero no me aclaro y no sé si habrá alguna forma de mejorar la URL propuesta en el párrafo anterior.

Eso es todo por ahora. Espero que alguien más aporte ideas, sugerencias y propuestas porque insisto en que me gustaría que esto fuese un proyecto colectivo. Y si alguien se atreve a empezar con la tarea (la obtención de datos), pues genial.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker

Última edición por Caravantes Día 07/11/21 a las 17:17:43.
Responder Con Cita


  #2  
Viejo 07/11/21, 17:20:49
Array

[xs_avatar]
Dark_Tamahome Dark_Tamahome no está en línea
Miembro del foro
 
Fecha de registro: oct 2021
Localización: España
Mensajes: 154
Modelo de smartphone: Realme GT
Tu operador: Simyo
 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Ya sabéis que el precio de la electricidad ha subido mucho. Y además nos marean porque cada hora tiene un precio distinto, sin que tenga validez alguna aquello que planteó el gobierno sobre los tramos "valle", "llano" y "punta". No sabemos a qué hora es razonable poner la lavadora o el radiador.

En la siguiente página de Red Eléctrica se puede ver una gráfica con los distintos precios que nos cobran, cada hora, por el consumo eléctrico. Se puede consultar el día actual, los días anteriores, y a partir de las 21 horas también se puede consultar el día siguiente.
https://www.esios.ree.es/es/pvpc

La propuesta es que Tasker obtenga esos datos para ayudarnos a gestionar mejor nuestros consumos eléctricos. Creo que este asunto puede interesar a más personas, y me gustaría que fuese un proyecto colectivo, no solo mío.

La idea de partida puede ser que Tasker consulte los precios cada día, a las 00:01, para hacer una tabla de 24 elementos, con el precio de cada hora. Luego ya iremos viendo la forma de gestionar óptimamente estos datos.

Por ejemplo, se podrían ordenar los precios de más bajo a más alto, como hace https://www.apaga-luz.com Además, por la mañana, Tasker podría sacarnos un aviso indicando cuál es la mejor hora para poner la lavadora, excluyendo las horas en que duermo o que no estoy en casa; quizá convendría añadir al aviso la sugerencia de dejar la lavadora para el día siguiente si no hay ninguna hora conveniente con precio barato. También podría establecerse un precio máximo admisible, y un enchufe inteligente apagaría los radiadores eléctricos si el precio de la hora actual está por encima de ese máximo. Por el contrario, se podría elegir la hora más barata de la mañana y la hora más barata de la tarde para que Tasker encendiera el termo eléctrico esas dos horas concretas, y mantenerlo apagado el resto del día. Quien tenga patinete o coche eléctrico podrá elegir las mejores horas para recargarlo. Y más cosas similares, según la necesidad de cada uno.

Habrá que estudiar cómo puede Tasker transmitir las órdenes de encendido/apagado a los enchufes inteligentes; quizá a través de Google-home, Alexa u otros sistemas. Sobre este asunto no tengo ninguna experiencia ni idea de como abordarlo. Tal vez haya que investigar, estudiar y hacer pruebas. O puede que algún compañero aporte su conocimiento para avanzar más rápido.

Pero el primer problema es encontrar un sitio de donde obtener los precios de la electricidad y que esos datos tengan un formato fácil de manejar.

De momento he visto que los datos diarios (del día actual) se pueden consultar en
https://api.esios.ree.es/archives/70...json?locale=es
Por la URL deduzco que los datos están en formato JSON.
Hay un montón de datos para cada hora del día. Creo que el dato PCB es el precio para la Península, Canarias y Baleares; y el precio CYM supongo que sea para Ceuta Y Melilla, que tienen un precio especial, distinto en algunos momentos. No sé lo que hay en el resto de los datos, pero creo que carece de interés para este planteamiento.

La API que tiene Red Eléctrica ofrece muchas más opciones, pero no me aclaro y no sé si habrá alguna forma de mejorar la URL propuesta en el párrafo anterior.

Eso es todo por ahora. Espero que alguien más aporte ideas, sugerencias y propuestas porque insisto en que me gustaría que esto fuese un proyecto colectivo. Y si alguien se atreve a empezar con la tarea (la obtención de datos), pues genial.

Muchas gracias, siempre va venir bien saber a cuantos nos clavan cada dia/hora
Responder Con Cita
  #3  
Viejo 08/11/21, 11:50:11
Array

[xs_avatar]
Osconse Osconse no está en línea
Miembro del foro
 
Fecha de registro: jul 2019
Mensajes: 147
Modelo de smartphone: Xiaomi Mi9
Tu operador: Otra
 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Ya sabéis que el precio de la electricidad ha subido mucho. Y además nos marean porque cada hora tiene un precio distinto, sin que tenga validez alguna aquello que planteó el gobierno sobre los tramos "valle", "llano" y "punta". No sabemos a qué hora es razonable poner la lavadora o el radiador.

En la siguiente página de Red Eléctrica se puede ver una gráfica con los distintos precios que nos cobran, cada hora, por el consumo eléctrico. Se puede consultar el día actual, los días anteriores, y a partir de las 21 horas también se puede consultar el día siguiente.
https://www.esios.ree.es/es/pvpc

La propuesta es que Tasker obtenga esos datos para ayudarnos a gestionar mejor nuestros consumos eléctricos. Creo que este asunto puede interesar a más personas, y me gustaría que fuese un proyecto colectivo, no solo mío.

La idea de partida puede ser que Tasker consulte los precios cada día, a las 00:01, para hacer una tabla de 24 elementos, con el precio de cada hora. Luego ya iremos viendo la forma de gestionar óptimamente estos datos.

Por ejemplo, se podrían ordenar los precios de más bajo a más alto, como hace https://www.apaga-luz.com Además, por la mañana, Tasker podría sacarnos un aviso indicando cuál es la mejor hora para poner la lavadora, excluyendo las horas en que duermo o que no estoy en casa; quizá convendría añadir al aviso la sugerencia de dejar la lavadora para el día siguiente si no hay ninguna hora conveniente con precio barato. También podría establecerse un precio máximo admisible, y un enchufe inteligente apagaría los radiadores eléctricos si el precio de la hora actual está por encima de ese máximo. Por el contrario, se podría elegir la hora más barata de la mañana y la hora más barata de la tarde para que Tasker encendiera el termo eléctrico esas dos horas concretas, y mantenerlo apagado el resto del día. Quien tenga patinete o coche eléctrico podrá elegir las mejores horas para recargarlo. Y más cosas similares, según la necesidad de cada uno.

Habrá que estudiar cómo puede Tasker transmitir las órdenes de encendido/apagado a los enchufes inteligentes; quizá a través de Google-home, Alexa u otros sistemas. Sobre este asunto no tengo ninguna experiencia ni idea de como abordarlo. Tal vez haya que investigar, estudiar y hacer pruebas. O puede que algún compañero aporte su conocimiento para avanzar más rápido.

Pero el primer problema es encontrar un sitio de donde obtener los precios de la electricidad y que esos datos tengan un formato fácil de manejar.

De momento he visto que los datos diarios (del día actual) se pueden consultar en
https://api.esios.ree.es/archives/70...json?locale=es
Por la URL deduzco que los datos están en formato JSON.
Hay un montón de datos para cada hora del día. Creo que el dato PCB es el precio para la Península, Canarias y Baleares; y el precio CYM supongo que sea para Ceuta Y Melilla, que tienen un precio especial, distinto en algunos momentos. No sé lo que hay en el resto de los datos, pero creo que carece de interés para este planteamiento.

La API que tiene Red Eléctrica ofrece muchas más opciones, pero no me aclaro y no sé si habrá alguna forma de mejorar la URL propuesta en el párrafo anterior.

Eso es todo por ahora. Espero que alguien más aporte ideas, sugerencias y propuestas porque insisto en que me gustaría que esto fuese un proyecto colectivo. Y si alguien se atreve a empezar con la tarea (la obtención de datos), pues genial.
Hola Caravantes, cuanto tiempo.

Me encanta el proyecto propuesto pero a nivel de Tasker poco voy a poder aportar pero lo seguiré atentamente pues me interesa mucho ya que tengo vehículo eléctrico, patinete y placas solares y quiero que mi factura se reduzca al máximo mientras no haya producción solar.

Mientras tanto yo uso la app Redos de Red Eléctrica (
https://linksharing.samsungcloud.com/61wIr3TsVJKQ) aunque desde hace unas semanas funciona malamente y no carga los datos a la primera.

No vamos leyendo y gracias por la propuesta!!
Responder Con Cita
  #4  
Viejo 12/11/21, 14:06:23
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
Un ejercicio muy interesante, pero aquí no se tira nadie a la piscina.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
De momento he visto que los datos diarios (del día actual) se pueden consultar en
https://api.esios.ree.es/archives/70...json?locale=es
Por la URL deduzco que los datos están en formato JSON.
Sí, son datos JSON que se pueden ver más fácilmente usando sitios como este... https://codebeautify.org/jsonviewer

Cargarlos en Tasker tiene poca ciencia...

Acción: Solicitud HTTP
Método: GET
URL: la propuesta
Salida Estructurada: sí

Y sacar los datos es tan fácil como usar la nueva sintáxis para manejar estructuras JSON/HTML/XML...

%http_data[Campo](índice)

"%http_data" es el nombre de la variable predefinida para la acción
"[Campo]" es el nombre del campo que nos interesa (ojo a las mayúsculas si las tiene)
"(indice)" es el número de índice si ese campo aparece más de una vez

Con algo así ... %http_data[Hora] ... se sacaría el valor del primer campo "Hora" que aparezca en el JSON ... "00-01"

Y con algo como ... %http_data[Hora](3) ... sacaríamos el tercer "Hora" del JSON ... "02-03"

Recorrer todos los valores con un búcle es cosa de niños.


 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Creo que el dato PCB es el precio para la Península, Canarias y Baleares; y el precio CYM supongo que sea para Ceuta Y Melilla
Por lo que he visto en varios sitios supones bien, esos son los precios del MWh. Ojo que en casi todas partes lo ponen en kWh.

Venga. Yo ya he abierto el melón. Lo siguiente puede ser sacar el valor máximo y el mínimo, por ejemplo.

__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
Parece que nadie se anima.

SACAR EL PRECIO MÁXIMO Y MÍNIMO

Partimos de que los datos están en una "estructura", parecida a un array, que Tasker genera automáticamente al cargar el archivo JSON.

Código:
Solicitud HTTP
  Método: GET
  URL: https://api.esios.ree.es/archives/70/download_json?locale=es
  Salida Estructurada: sí
El precio del MWh está almacenado en los campos "PCB" (para Península/Canarias/Baleares) y "CYM" (para Ceuta/Melilla). Elegir el campo adecuado es un pequeño reto muy fácil de resolver.

Código:
Obtener Ubicación v2
%campo = CYM [SI %gl_latitude < 35.95 Y %gl_longitude > -5.60]
%campo = PCB [SI %campo INDEF]
Creo que eso no requiere muchas aclaraciones. Si estás más al sureste de Tarifa seguramente te interesa el campo CYM, en otro caso tu campo es PCB.

Y una vez decido el %campo que nos interesa los precios para cada hora del día estarán en el array ... %http_data[%campo]()

Para sacar el precio más alto y/o más bajo simplemente tenemos que recorrer ese array tomando nota de si el valor analizado es mayor o menor que el que tuviéramos anotado previamente.

Código:
%pmin=999
%pmax=0
PARA %pmwh EN %http_data[%campo]()
  %pmin = %pmwh [SI %pmwh < %pmin]
  %pmax = %pmwh [SI %pmwh > %pmax]
FIN PARA
Mostramos los resultados...

Código:
FLASH %campo Mín: %pmin Máx: %pmax
...y no funciona.

No es del planteamiento. No es de las acciones (salvando errores tipográficos). No es nada que esté a la vista. Y se soluciona con una acción.

¿Alguien se lanza al ruedo?
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
SACAR EL PRECIO MÁXIMO Y MÍNIMO

Bueno, he añadido alguna cosita más, para generar un array con el precio de todas las horas, e ir visualizando resultados (parciales y finales)


Tarea: PrecioElectric
Código:
A1: Solicitud HTTP [
       Método: GET
       URL: https://api.esios.ree.es/archives/70...json?locale=es
       Tiempo Límite (Segundos): 30
       Structure Output (JSON, etc): Encendido ]
   
  A2: Establecer Variable [
       Nombre: %campo
       A: PCB
       Dígitos de Redondeo Máximos: 3
       Structure Output (JSON, etc): Encendido ]
   
  A3: Establecer Variable [
       Nombre: %pmin
       A: 999
       Calcular: Encendido
       Dígitos de Redondeo Máximos: 3
       Structure Output (JSON, etc): Encendido ]
   
  A4: Establecer Variable [
       Nombre: %pmax
       A: 0
       Calcular: Encendido
       Dígitos de Redondeo Máximos: 3
       Structure Output (JSON, etc): Encendido ]
   
  A5: Establecer Variable [
       Nombre: %pmwh
       A: 0
       Calcular: Encendido
       Dígitos de Redondeo Máximos: 3
       Structure Output (JSON, etc): Encendido ]
   
  A6: Establecer Variable [
       Nombre: %hora
       A: 0
       Calcular: Encendido
       Dígitos de Redondeo Máximos: 3
       Structure Output (JSON, etc): Encendido ]
   
  A7: Para (for) [
       Variable: %pmwh
       Ítems: %http_data[%campo]()
       Structure Output (JSON, etc): Encendido ]
   
      A8: Establecer Variable [ - Nombre: %pmin - A: %pmwh - Calcular: Encendido - Dígitos de Redondeo Máximos: 3 - Structure Output (JSON, etc): Encendido ]
          Si (if)  [ %pmwh < %pmin ]
   
      A9: Establecer Variable [ - Nombre: %pmax - A: %pmwh - Calcular: Encendido - Dígitos de Redondeo Máximos: 3 - Structure Output (JSON, etc): Encendido ]
          Si (if)  [ %%pmwh > %pmax ]
   
      A10: Insertar en Array [ -  Matriz de Variables (array): %precio -  Posición: 25 -  Valor: %pmwh ]
   
      A11: Flash [ -  Texto: hora:%hora. Precio:%pmwh. Min:%pmin . Max:%pmax. ]
          Si (if)  [ %hora < 2 | %hora > 21 ]
   
      A12: Sumar a Variable [ -  Nombre: %hora -  Valor: 1 -  Enrollar (wrap around): 0 ]
   
  A13: Fin Para (end for)
   
  A14: Flash [
        Texto: Elementos: %precio(#) - %precio()
        Largo: Encendido ]
   
  A15: Flash [
        Texto: %campo Min:%pmin . Max:%pmax
         Largo: Encendido ]
...y -efectivamente- no funciona.

He estado un rato dándole vueltas e incluso he inicializado la variable (en A5) pero sigue sin funcionar y no soy capaz de averiguar qué falla.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
  #7  
Viejo 14/11/21, 09:53:25
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Caravantes Ver Mensaje
He estado un rato dándole vueltas e incluso he inicializado la variable (en A5) pero sigue sin funcionar y no soy capaz de averiguar qué falla.
Pues es de locos. Los valores numéricos del JSON no son números ... ¿cómo te has quedado?

Lo que pasa realmente es que, para Tasker, el separador decimal es el punto y en el JSON se usa la coma.

Código:
Solicitud HTTP
  Método: GET
  URL: https://api.esios.ree.es/archives/70/download_json?locale=es
  Salida Estructurada: sí

Buscar y Reemplazar en Variable
  Variable: %http_data
  Buscar: (\d),(\d)
  Reemplazar Con: $1.$2
Con esas dos acciones cargas el JSON y cambias todos sus valores numéricos para que Tasker los interprete adecuadamente.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Bueno, he añadido alguna cosita más, para generar un array con el precio de todas las horas...
Lo que recorres en el bucle es un array con el precio de todas las horas ... %http_data[%campo]()



Voy a proponer otra forma de encontrar los valores mínimo/máximo que tiene ventajas adicionales.

Código:
Establecer Array [ %pmwh = %http_data[%campo]() - Separador: ,]
Procesar Array [ %pmwh - Tipo: Orden Numérico, Coma Flotante ]
Establecer Variable [ %pmin = %pmwh(>) ]
Establecer Variable [ %pmax = %pmwh(<) ]
Sin bucle. Sin Comparaciones. Sin inicializar variables. Con menos acciones. Y ahora tenemos un array con los precios ordenados de menor a mayor.

Si ahora quieres una lista de los cuatro precios más bajos simplemente haces esto...

%pbajos = %pmwh(:4)

Genial, pero ¿a qué horas?
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
Es curioso que este tema ya tenga 300 lecturas y que nadie diga nada.

Terminaba yo mi soliloquio con esta pregunta retórica...

 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Genial, pero ¿a qué horas?
Existen varias soluciones dependiendo de lo que queramos hacer con la información. El propósito más simple sería mostrarla con una notificación o un flash, en cuyo caso necesitamos algo "legible" del tipo...

111.22 €/MWh de 01-02

Para eso simplemente tenemos que combinar los arrays de los precios y las horas de esta forma...

Código:
Arrays Merge
  Nombres: %http_data[%campo] y %http_data[Hora] (cada uno en una línea)
  Tipo: Simple
  Esamblador: _€/MWh de_ (el _ es un espacio en blanco)
  Salida: %pyh
Esa acción sustituye al "Establecer Arrary %pmwh" que usé antes, de forma que ese bloque ahora quedaría así...

Código:
Arrays Merge ... (lo de arriba)
Procesar Array [ %pyh - Tipo: Orden Numérico, Coma Flotante ]
Establecer Variable [ %pmin = %pyh(>) ]
Establecer Variable [ %pmax = %pyh(<) ]
Otra cosa relacionada con esta historia...

La otra tarde/noche, pasadas ya las 21:00, los datos que contenía el JSON llevaban fecha del día siguiente. Supongo que a esas horas se hacen públicas las nuevas tarifas y la URL que estamos usando descarga los últimos datos disponibles. El caso es que quería ver el precio de las últimas horas del día y ya no pude.

Eso se puede solucionar pasando un parámetro adicional en la URL que descarga los datos, tal que así...

Código:
https://api.esios.ree.es/archives/70/download_json?locale=es&date=aaaa-mm-dd
Y para el que se lo pregunte, ese formato de fecha (aaaa-mm-dd) es fácil de componer usando una acción "Parse/Format Date And Time".

¿Todo claro hasta aquí?

Bueno. Pues llegados a este punto, y para que a Caravantes no le pegue un jamacuco con tanto subir y bajar, voy a juntar todo lo que tenemos hasta el momento.

Código:
Parse/Format Date And Time
  Tipo: Now
  Output: yyyy-MM-dd
  Variable: ymd
  Offset: (jugar con sus valores)

Solicitud HTTP
  Método: GET
  URL: https://api.esios.ree.es/archives/70/download_json?locale=es&date=%ymd
  Salida Estructurada: sí

Buscar y Reemplazar en Variable
  Variable: %http_data
  Buscar: (\d),(\d)
  Reemplazar Con: $1.$2

Obtener Ubicación v2
%campo = CYM [SI %gl_latitude < 35.95 Y %gl_longitude > -5.60]
%campo = PCB [SI %campo INDEF]

Arrays Merge
  Nombres: %http_data[%campo] y %http_data[Hora] (cada uno en una línea)
  Tipo: Simple
  Esamblador: _€/MWh de_ (el _ es un espacio en blanco)
  Salida: %pyh

Procesar Array [ %pyh - Tipo: Orden Numérico, Coma Flotante ]
Establecer Variable [ %pmin = %pyh(>) ]
Establecer Variable [ %pmax = %pyh(<) ]

Flash [ %pmin ]
Eso nos muestra a qué hora tenemos el precio más bajo, pero un programa de lavado lo mismo necesita dos o tres horas, a ser posible a un precio que nos salga más rentable lavar que tirar la ropa sucia y renovar el armario.

¿Qué hacemos con eso?
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

Última edición por WillyWeb Día 06/12/21 a las 11:24:42.
Responder Con Cita
  #9  
Viejo 15/11/21, 19:36:07
Array

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Sin bucle. Sin Comparaciones. Sin inicializar variables. Con menos acciones. Y ahora tenemos un array con los precios ordenados de menor a mayor.
Pues parecía una buena idea pero creo que no funciona. (o yo me he equivocado en algún detalle)

A1: Solicitud HTTP [
Método: GET
URL: https://api.esios.ree.es/archives/70...json?locale=es
Tiempo Límite (Segundos): 30
Structure Output (JSON, etc): Encendido ]

A2: Establecer Variable [
Nombre: %campo
A: PCB
Dígitos de Redondeo Máximos: 3
Structure Output (JSON, etc): Encendido ]

A3: Establece Array [
Matriz de Variables (array): %pmwh
Valores: %http_data[%campo]()
Separador: , ]

A4: Flash [
Texto: Elementos: %pmwh(#) - %pmwh()
Largo: Encendido ]

A5: Procesar Array [
Matriz de Variables (array): %pmwh
Tipo: Orden Numérico, Coma-Flotante ]

A6: Establecer Variable [
Nombre: %pmin
A: %pmwh(>)
Calcular: Encendido
Dígitos de Redondeo Máximos: 3
Structure Output (JSON, etc): Encendido ]

A7: Establecer Variable [
Nombre: %pmax
A: %pmwh(<)
Calcular: Encendido
Dígitos de Redondeo Máximos: 3
Structure Output (JSON, etc): Encendido ]

A8: Flash [
Texto: Elementos: %pmwh(#) - %pmwh()
Largo: Encendido ]

A9: Flash [
Texto: %campo Min:%pmin . Max:%pmax
Largo: Encendido ]


El array se genera en la acción 3, y he insertado una acción 4 que muestra el número de elementos y luego el array completo, y resulta que el array tiene 48 elementos porque Tasker confunde el separador de elementos con las comas decimales que tienen los valores obtenidos.


ArrayPrecios48.jpg

Puesto que hay un valor que es 210,00 y tasker considera que eso son dos elementos del array, al final de la tarea resulta que el valor mínimo %pmin es 00. Y también resulta que el valor máximo %pmax es 316 (cuando debería ser 316,13).

 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Si ahora quieres una lista de los cuatro precios más bajos simplemente haces esto... %pbajos = %pmwh(:4) Genial, pero ¿a qué horas?
Yo había pensado un array de dos dimensiones, o (creo que lo prefiero) dos arrays, uno para las horas y otro para los precios; haría un bucle (con otro bucle interno) para ordenar los precios por el procedimiento clásico, pero si hay que intercambiar valores (porque están en el orden incorrecto), no solo intercambio los precios sino también las horas. De esta forma al final tengo un array con los precios ordenados y otro array paralelo con las horas correspondientes a esos precios. La hora que estuviera en primera posición sería la del precio más bajo y la última sería la del precio más caro.


Luego haría un segundo bucle para encontrar la hora más barata de la mañana (AM) y la hora más barata de la tarde (PM), tal como indiqué en el enunciado incial para encender el termo en esas dos horas (salvo que esas horas estén muy próximas (diferencia<6), en cuyo caso enciendo el termo solo una de ellas, la más barata). Sé que todo esto hace tareas muy largas, pero eso es algo que a mí nunca me ha preocupado; no soy bueno optimizando ni abreviando, por lo que suelo acabar con tareas largas, y no me importa porque funcionan y las entiendo.

Pero todos estos detalles posteriores siguen supeditados a que encontremos primero la forma de evitar la confusión entre comas decimales y separadores de array. En la acción 3 que genera el array he probado a poner como separador un punto y coma (;) y también he probado a poner un punto (.) pero tampoco sirve; en ambos casos la acción 4 me dice que el array obtenido tiene un solo elemento (muy largo). Por otro lado, puede haber una solución fácil porque mi tarea de ayer sí que terminaba con un array de 24 elementos.
ArrayPrecios24.jpg
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker

Última edición por Caravantes Día 15/11/21 a las 19:44:46.
Responder Con Cita
  #10  
Viejo 15/11/21, 19:42:07
Array

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Pues llegados a este punto, y para que a Caravantes no se le pegue un jamacuco con tanto subir y bajar, voy a juntar todo lo que tenemos hasta el momento.
Hola Willy. Estaba trabajando con tu penúltimo mensaje (construyendo la tarea y escribiendo la respuesta) mientras tu estabas publicando otro mensaje nuevo. Aunque he publicado mi respuesta después, no había leído ese último mensaje tuyo. Quedo pendiente de leer ese último mensaje tuyo, ahora no tengo tiempo.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
  #11  
Viejo 15/11/21, 21:30:28
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Caravantes Ver Mensaje
... resulta que el array tiene 48 elementos porque Tasker confunde el separador de elementos con las comas decimales que tienen los valores obtenidos.
Se te ha pasado esto...

 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Lo que pasa realmente es que, para Tasker, el separador decimal es el punto y en el JSON se usa la coma.

Código:
Solicitud HTTP
  Método: GET
  URL: https://api.esios.ree.es/archives/70/download_json?locale=es
  Salida Estructurada: sí

Buscar y Reemplazar en Variable
  Variable: %http_data
  Buscar: (\d),(\d)
  Reemplazar Con: $1.$2
Con esas dos acciones cargas el JSON y cambias todos sus valores numéricos para que Tasker los interprete adecuadamente.
Si no haces eso, además del problema de la coma que ya te has encontrado, tampoco podrás procesar los datos adecuadamente.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Yo había pensado un array de dos dimensiones, o (creo que lo prefiero) dos arrays...
Como te comenté antes los datos que estás procesando ya están en un array que Tasker crea automáticamente a partir de la estructura del JSON. La única pega que le he encontrado a ese tipo de array/estructura es que no se puede modificar (es de solo-lectura) y tienes que hacer una copia en un array "normal" para poder ordenarlo, por ejemplo. De todas formas buena parte de todo ese planteamiento que haces se resuelve con una sola acción, como te cuento en el mensaje anterior.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Luego haría un segundo bucle para encontrar la hora más barata de la mañana (AM) y la hora más barata de la tarde (PM)...
Ese es un planteamiento muy interesante.

Así, a bote pronto, se me ocurre partir el día en dos (PM y AM) y sacar el máximo/mínimo de cada una de las partes. Con el sistema que te he propuesto creo que eso se podría hacer con muy pocas acciones más.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Quedo pendiente de leer ese último mensaje tuyo, ahora no tengo tiempo.
Sin problema. Aquí te espero.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Código:
Arrays Merge
  Nombres: %http_data[%campo] y %http_data[Hora] (cada uno en una línea)
  Tipo: Simple
  Esamblador: _€/MWh de_ (el _ es un espacio en blanco)
  Salida: %pyh
La leche, eso ha sido muy interesante. El

Flash Array de %pyh(#) elementos: %pyh()
me saca lo siguiente
Array PYH.jpg

Es fascinante, pero realmente lo veo poco práctico. Por ejemplo, con esa estructura no veo nada fácil ordenar por horas (AM/PM). Por otro lado, si lo que queremos es terminar sacando por pantalla un aviso del tipo "El mejor momento de poner la lavadora es a las 03 (precio 203.90 €/Mwh)" me parece más práctico componer y formatear ese texto en el momento de lanzar el aviso/flash/notificación, y no en el array; en los array creo preferible tener los datos de la forma más simple posible, para facilitar tareas como la ordenación por horas o bien tener una tabla/array en la que meto las horas en las que no estoy en casa (o estoy durmiendo) y la tarea debería ser capaz de descartar esas horas.

Establecer variable %nolavar a 00,01,02,03,04,05,06,07,08,09,10,11,12,13,14

Por otro lado, tengo un problema con la variable %pmin
ErrorPmin.jpg
Me sospecho que este problema está derivado precisamente de haber hecho el merge, juntando en cada elemento del array datos numéricos y texto. ¿o puede que yo me haya vuelto a equivocar en alguna otra cosa?

Código:
    Tarea: PrecioElectric2
    
    A1: Solicitud HTTP [
         Método: GET
         URL: https://api.esios.ree.es/archives/70/download_json?locale=es
         Tiempo Límite (Segundos): 30
         Structure Output (JSON, etc): Encendido ]
    
    A2: Buscar y Reemplazar en Variable [
         Variable: %http_data
         Buscar: (\d),(\d)
         Reemplazar Coincidencias: Encendido
         Reemplazar Con: $1.$2 ]
    
    A3: Establecer Variable [
         Nombre: %campo
         A: PCB
         Dígitos de Redondeo Máximos: 3
         Structure Output (JSON, etc): Encendido ]
    
    A4: Arrays Merge [
         Nombres: %http_data[%campo]
         %http_data[Hora]
         Merge Type: Simple
         Ensamblador:  €/MWh de 
         Salida: %pyh ]
    
    A5: Procesar Array [
         Matriz de Variables (array): %pyh
         Tipo: Orden Numérico, Coma-Flotante ]
    
    A6: Flash [
         Texto: Array de %pyh(#) elementos:
         %pyh()
         Largo: Encendido ]
    
    A7: Establecer Variable [
         Nombre: %pmin
         A: %pyh(>)
         Calcular: Encendido
         Dígitos de Redondeo Máximos: 3
         Structure Output (JSON, etc): Encendido ]
    
    A8: Establecer Variable [
         Nombre: %pmax
         A: %pyh(<)
         Calcular: Encendido
         Dígitos de Redondeo Máximos: 3
         Structure Output (JSON, etc): Encendido ]
    
    A9: Flash [
         Texto: %campo Min:%pmin . Max:%pmax
         Largo: Encendido ]
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Así, a bote pronto, se me ocurre partir el día en dos (PM y AM) y sacar el máximo/mínimo de cada una de las partes. Con el sistema que te he propuesto creo que eso se podría hacer con muy pocas acciones más.

Pues explícanos cómo, porque yo creo que no sabría hacerlo sin un array independiente para las horas. Gracias por tu tiempo y tu sapiencia.
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
  #13  
Viejo 16/11/21, 22:02:54
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Es fascinante, pero realmente lo veo poco práctico...
Hombre, no me digas eso, que casi te he resuelto esto ...

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Yo había pensado un array de dos dimensiones, o (creo que lo prefiero) dos arrays, uno para las horas y otro para los precios; haría un bucle (con otro bucle interno) para ordenar los precios por el procedimiento clásico, pero si hay que intercambiar valores (porque están en el orden incorrecto), no solo intercambio los precios sino también las horas. De esta forma al final tengo un array con los precios ordenados y otro array paralelo con las horas correspondientes a esos precios. La hora que estuviera en primera posición sería la del precio más bajo y la última sería la del precio más caro.
... con dos acciones.

Solo te falta extraer los precios y las horas de %pyh() tirando de "Buscar y Reemplazar". Con una RegEx como \d\d\d\.\d\d deberían salir los precios y con \d\d-\d\d las horas. Y si afinas esa última un poco te quedas solo con la hora de inicio, que es la que parece que te interesa.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Por otro lado, tengo un problema con la variable %pmin
Es que tienes marcado "Calcular" en A7 y A8.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Pues explícanos cómo, porque yo creo que no sabría hacerlo sin un array independiente para las horas. Gracias por tu tiempo y tu sapiencia.
Cuando haces el "Arrays Merge" juntas los datos de las 24 horas porque estás tirando de %http_data[PCB]. La idea es separar previamente los datos de AM/PM y procesar cada parte por separado.

Código:
Establecer Array [ %pream con %http_data[PCB](1:12) y separador , ]
Establecer Array [ %horam con %http_data[Hora](1:12) y separador , ]
Array Merge [ %pream y %horam ensamblados con " de " unidos en %pyham]
Procesar Array [ %pyham Orden Numérico, Coma-Flotante ]

Establecer Array [ %prepm con %http_data[PCB](13:24) y separador , ]
Establecer Array [ %horpm con %http_data[Hora](13:24) y separador , ]
Array Merge [ %prepm y %horpm ensamblados con " de " unidos en %pyhpm]
Procesar Array [ %pyhpm Orden Numérico, Coma-Flotante ]
Eso debería funcionar. Prueba y me cuentas.

Por cierto, si vas a usar siempre los datos PCB te puedes ahorrar la variable %campo y A3.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Hombre, no me digas eso, que casi te he resuelto esto
Uf. Creo que el problema es que estás tres peldaños por encima de mí y seguramente no soy capaz de entender todas las posibilidades que hay para seguir desarrollando lo que has propuesto hasta el momento. Por poner solo un ejemplo, tú dominas el asunto de las expresiones regulares, y yo no (es una de mis asignaturas pendientes); por ese tipo de cosas es por las que -algunas veces- no veo cómo continuar avanzando en lo que has propuesto. Pero valoro y agradezco lo que aportas, sobre todo porque así vamos aprendiendo. Cada vez que pones una expresión regular consulto en Internet para entenderla, porque no me conformo con una tarea que has hecho tú y que yo no entienda. También me pasa con el abanico de acciones de Tasker, que tú pareces dominar mejor que nadie y utilizas posibilidades que a mí no se me habrían ocurrido. Gracias nuevamente.

 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Es que tienes marcado "Calcular" en A7 y A8.
Vaya. Por el nombre de la variable (%pmin) supuse que era el precio mínimo, variable numérica. En la primera versión de la tarea, esa acción no daba problemas porque en el array solo había números. Ahora siendo un array alfanumérico no tiene sentido manener la casilla de CALCULAR. Arreglado, gracias.

Ya me había dado cuenta de que podía quitar la variable %campo. Inicialmente la había dejado por si se apuntaba al proyecto algún compañero de Ceuta y Melilla, pero parece claro que eso no está ocurriendo, y de todas formas tiene fácil sustituir PCB por CYM (en un solo sitio) o sea que tienes razón en que es mejor quitarlo.

Y sí, la tarea funciona perfectamente.
ArrayAM.jpg

Código:
A1: Solicitud HTTP [
         Método: GET
         URL: https://api.esios.ree.es/archives/70...json?locale=es
         Tiempo Límite (Segundos): 30
         Structure Output (JSON, etc): Encendido ]
    
    A2: Buscar y Reemplazar en Variable [
         Variable: %http_data
         Buscar: (\d),(\d)
         Reemplazar Coincidencias: Encendido
         Reemplazar Con: $1.$2 ]
    
    A3: Arrays Merge [
         Nombres: %http_data[PCB]
         %http_data[Hora]
         Merge Type: Simple
         Ensamblador:  €/MWh de 
         Salida: %pyh ]
    
    A4: Procesar Array [
         Matriz de Variables (array): %pyh
         Tipo: Orden Numérico, Coma-Flotante ]
    
    A5: Flash [
         Texto: Array de %pyh(#) elementos:
         %pyh()
         Largo: Encendido ]
    
    A6: Establecer Variable [
         Nombre: %pmin
         A: %pyh(>)
         Dígitos de Redondeo Máximos: 3
         Structure Output (JSON, etc): Encendido ]
    
    A7: Establecer Variable [
         Nombre: %pmax
         A: %pyh(<)
         Dígitos de Redondeo Máximos: 3
         Structure Output (JSON, etc): Encendido ]
    
    A8: Flash [
         Texto: PCB Min:%pmin . Max:%pmax
         Largo: Encendido ]
    
    A9: Establece Array [
         Matriz de Variables (array): %pream
         Valores: %http_data[PCB](1:12)
         Separador: , ]
    
    A10: Establece Array [
          Matriz de Variables (array): %horam
          Valores: %http_data[Hora](1:12)
          Separador: , ]
    
    A11: Arrays Merge [
          Nombres: %pream
         %horam
          Merge Type: Simple
          Ensamblador:  de 
          Salida: %pyham ]
    
    A12: Procesar Array [
          Matriz de Variables (array): %pyham
          Tipo: Orden Numérico, Coma-Flotante ]
    
    A13: Flash [
          Texto: Array AM de %pyham(#) elementos:
         %pyham()
          Largo: Encendido ]
    
    A14: Establece Array [
          Matriz de Variables (array): %prepm
          Valores: %http_data[PCB](13:24)
          Separador: , ]
    
    A15: Establece Array [
          Matriz de Variables (array): %horpm
          Valores: %http_data[Hora](13:24)
          Separador: , ]
    
    A16: Arrays Merge [
          Nombres: %prepm
         %horpm
          Merge Type: Simple
          Ensamblador:  de 
          Salida: %pyhpm ]
    
    A17: Procesar Array [
          Matriz de Variables (array): %pyhpm
          Tipo: Orden Numérico, Coma-Flotante ]
    
    A18: Flash [
          Texto: Array PM de %pyhpm(#) elementos:
         %pyhpm()
           Largo: Encendido ]
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
  #15  
Viejo 18/11/21, 18:30:51
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Y sí, la tarea funciona perfectamente.
Pues me alegro. No lo había probado.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Cada vez que pones una expresión regular consulto en Internet para entenderla...
No eres el único. Me he leído esto docenas de veces...

Expresión regular - Wikipedia

Y hago pruebas, hasta que sale lo que quiero, en este otro sitio...

https://regex101.com

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
También me pasa con el abanico de acciones de Tasker, que tú pareces dominar mejor que nadie y utilizas posibilidades que a mí no se me habrían ocurrido.
En su momento revisé TODAS las acciones de Tasker y procuré (no siempre pude) escribir una pequeña tarea de prueba para asegurarme de que había entendido su funcionamiento. Repito ese proceso cada vez que João añade una nueva acción. Gracias a eso creo que llego a usar casi la mitad de las posibilidades de Tasker.

 Cita: Originalmente Escrito por Caravantes Ver Mensaje
Ahora siendo un array alfanumérico no tiene sentido mantener la casilla de CALCULAR.
La casilla solo se debe marcar si el valor que se quiere asignar a la variable tiene que salir de evaluar matemáticamente lo que se ponga en el campo "A". En cualquier otro caso puede dar resultados no deseables, como esta vez.

RECAPITULEMOS...
  • Podemos leer el JSON y ajustar sus valores numéricos para que Tasker los interprete adecuadamente.
  • Hemos dado con un sistema simple y rápido de ordenar "en paralelo" dos arrays (precios y horas).
  • Podemos hacer el proceso anterior para las 24 horas, los tramos AM/PM, o cualquier otro periodo de horas.
  • Podemos sacar fácilmente el precio/hora más bajo ... %pyh(>) %pyhpm(>) %pyham(>).
  • Y también podemos sacar los X precios/horas más bajos de cualquiera de esos tramos.

Me ha parecido entender que ahora quieres ordenar esas X horas, pero antes las tienes que sacar del sitio en el que están "encajadas" ... nnn.nn de hh-hh ... y no ves claro cómo hacerlo.



Una vez ordenados "en paralelo" los precios/horas de uno de los tramos horarios (pongamos que el AM) sacamos las X horas (pongamos que 4) más baratas así...

%pyhamb = %pyham(:4)

Creo que si luego hacemos esto...

Concatenar Variable [ %pyhamb ]
Buscar y Reemplazar [ \d\d-\d\d en %pyhamb y almacenar en %horamb ]
Ordenar [ %horamb en Orden Numérico, Enteros ]

...ya lo tendríamos.

__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
Hola.
Perdón por el retraso en responder, por causa de obligaciones familiares y otros asuntos sociales. Sigamos.

 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
RECAPITULEMOS... Podemos leer el JSON y ajustar sus valores numéricos para que Tasker los interprete adecuadamente. Hemos dado con un sistema simple y rápido de ordenar "en paralelo" dos arrays (precios y horas). Podemos hacer el proceso anterior para las 24 horas, los tramos AM/PM, o cualquier otro periodo de horas. Podemos sacar fácilmente el precio/hora más bajo ... %pyh(>) %pyhpm(>) %pyham(>). Y también podemos sacar los X precios/horas más bajos de cualquiera de esos tramos.
Creo que sí, que voy entendiendo todo eso.

 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Me ha parecido entender que ahora quieres ordenar esas X horas, pero antes las tienes que sacar del sitio en el que están "encajadas" ... nnn.nn de hh-hh ... y no ves claro cómo hacerlo.
Una vez ordenados "en paralelo" los precios/horas de uno de los tramos horarios (pongamos que el AM) sacamos las X horas (pongamos que 4) más baratas así...
%pyhamb = %pyham(:4)
Creo que si luego hacemos esto...
Concatenar Variable [ %pyhamb ]
...
Paremos aquí porque eso último (en negrita) ya no me ha funcionado. Le he añadido a la tarea las acciones siguientes:

Código:
    A19: Establecer Variable [
          Nombre: %pyhamb
          A: %pyham(:4)
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
     A20: Flash [
          Texto: pyhamb=%pyhamb
          Largo: Encendido ]
     A21: Concatenar Variable [
          Nombre: %pyhamb ]
     A22: Flash [
          Texto: pyhamb=%pyhamb
          Largo: Encendido ]
He comprobado que %pyham(:4) sí contiene los cuatro valores más bajos del array, y en A19 esos cuatro valores son traspasados a la variable %pyhamb
A20 me muestra el contenido de esa variable, ok
pyhamb-Ok.jpg

Tras Concatenar Variable [ %pyhamb ]
A22 me vuelve a mostrar el contenido de esa variable, y ahí es donde ya no funciona
pyhamb-mal.jpg

Realmente no entiendo la acción A21: Concatenar Variable [ %pyhamb ]
Yo pensaba que la acción concatenar sirve para "unir" varios elementos de un array, pero aquí %pyhamb no es un array, según creo, y por eso no funciona.
O me estoy despistando en otra cosa?
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
  #17  
Viejo 25/11/21, 08:50:10
Array

[xs_avatar]
WillyWeb WillyWeb no está en línea
Usuario muy activo
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,048
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Tu operador: Vodafone
No te funciona porque te has comido la parte importante...

Buscar y Reemplazar [ \d\d-\d\d en %pyhamb y almacenar en %horamb ]

Eso genera el array que echas en falta y que solo contiene las horas.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
No te funciona porque te has comido la parte importante...

Buscar y Reemplazar [ \d\d-\d\d en %pyhamb y almacenar en %horamb ]

Creo que ese no es el problema.
Como he comentado en mi mensaje anterior (y mostrando los flash), la acción de
Concatenar Variable [ %pyhamb ]
deja vacía (limpia) esa variable %pyhamb
Y eso me parecía suficiente problema para no continuar.

La acción que propones como continuación
Buscar y Reemplazar [ \d\d-\d\d en %pyhamb y almacenar en %horamb ]
da un error porque la variable %pyhamb no está definida. O al menos eso es lo que yo interpreto. Por si no se lee bien la imagen, el texto en amarillo dice
"Buscar y Reemplazar en Variable: undefined variable: %pyhamb"

Error pyhamb.jpg


Código:
    A19: Establecer Variable [
          Nombre: %pyhamb
          A: %pyham(:4)
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    A20: Flash [
          Texto: pyhamb=%pyhamb
          Largo: Encendido ]
    A21: Concatenar Variable [
          Nombre: %pyhamb ]
    A22: Buscar y Reemplazar en Variable [
          Variable: %pyhamb
          Buscar: \d\d-\d\d
          Almacenar Coincidencias En Array: %horamb ]
    A23: Flash [
          Texto: pyhamb=%pyhamb
          Largo: Encendido ]
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
  #19  
Viejo 25/11/21, 23:02:45
Array

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


Vale, ya he visto en qué la he cagado. El resultado de esto... %pyham(:4) ...no es un array. Ya es una lista de valores concatenados. No te habías despistado.

Si quitas A21 (la acción de concatenar) debería funcionar, pero para verlo tendrás que cambiar el flash de A23 así... horamb=%horamb

Perdona por darte indicaciones incorrectas.
__________________
Miembro del equipo que promueve el [Subforo de Tasker]

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

Última edición por WillyWeb Día 06/12/21 a las 11:31:09. Razón: Error tipográfico
Responder Con Cita


  #20  
Viejo 26/11/21, 00:53:16
Array

[xs_avatar]
Caravantes Caravantes no está en línea
Usuario muy activo
· Votos compra/venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Tu operador: Lowi
 Cita: Originalmente Escrito por WillyWeb Ver Mensaje
Vale, ya he visto en qué la he cagado. El resultado de esto... %pyham(:4) ...no es un array. Ya es una lista de valores concatenados.

Un array y una variable de valores concatenados tienen el mismo aspecto, así que no me sorprende nada que también te puedas haber confundido en la composición mental.
Y no te disculpes porque solo se equivoca el que hace cosas.
La cuestión es que ya funciona, tenemos la lista de las 4 horas más baratas en horario AM.
Horamb.jpg
Código:
    A19: Establecer Variable [
          Nombre: %pyhamb
          A: %pyham(:4)
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    
    A20: Flash [
          Texto: pyhamb=%pyhamb
          Largo: Encendido ]
    
    A21: Buscar y Reemplazar en Variable [
          Variable: %pyhamb
          Buscar: \d\d-\d\d
          Almacenar Coincidencias En Array: %horamb ]
    
    A22: Procesar Array [
          Matriz de Variables (array): %horamb
          Tipo: Orden Numérico, Enteros ]
    
    A23: Flash [
          Texto: horamb=%horamb()
          Largo: Encendido ]
Por similar procedimiento se podrían obtener la lista de x horas más baratas en AM, PM o en el conjunto de las 24 horas.
Esto soluciona uno de los objetivos iniciales que yo había planteado: elegir la hora más barata de AM y de PM para encender el termo eléctrico, que quedaría apagado las otras 22 horas (el agua se mantiene caliente muchas horas, no hay problema, lo tengo comprobado).


Nos queda pendiente el tema de averiguar cómo hacemos que Tasker active y desactive un enchufe inteligente, asunto sobre el que no tengo ni repajolera idea, pero creo que hay páginas que dan algunas pistas, como por ejemplo
https://eshome.es/controla-home-assistant-con-tasker
De este asunto ya empezamos a hablar en 2017 pero desde entonces estos inventos han cambiado mucho.
https://www.htcmania.com/showthread.php?t=1280843



Volviendo a las horas, hemos dividido la jornada en dos tramos (AM-PM) pero igualmente se podría dividir en cuatro tramos o en los que se quiera, según las necesidades de cada uno. Incluso es posible hacer tramos desiguales (asimétricos), sin problema.



Creo que falta añadir un detalle de cierta importancia, según mi planteamiento inicial:
Supongamos que hay ciertas horas en las que no voy a estar en casa, o voy a estar durmiendo. Es claro que en esas horas no voy a poner la lavadora, aunque sean las horas baratas. La tarea debería ser capaz de decirme la hora más barata que esté en mi lista de horas operativas para lavar. Como ya dije hace unos días, se podría hacer mediante algo así

A) Establecer variable %nuncalavar a 00,01,02,03,04,05,06,07,08,09,10,11,12,13,14

O todo lo contrario
B) Establecer variable %puedelavar a 15,16,17,18,19,20,21,22,23

Y ahora viene lo difícil, que es encontrar la hora más barata que encaje con una limitación de horarios de ese tipo.
Lo veo igual de complidado por el método A que por el B. No es difícil, pero sí es un poco tedioso. Yo haría dos bucles anidados para ir viendo si la hora más barata es válida para cada una de las horas de mi horario; en caso contrario habría que probar con la segunda hora más barata, etc, hasta encontrar con una hora "barata" que encaje en mi horario. Calculo que eso me conlleva unas 20 acciones.
Pero supongo que Willy y su magia son capaces de abreviar el asunto. ¿no?
__________________
Firmado: Caravantes, miembro del equipo que promueve el Subforo de Tasker
Responder Con Cita
Respuesta

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



Hora actual: 23:09:29 (GMT +2)



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

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