|
Tasker Para hablar de todo lo relacionado con la aplicación tasker |
|
Herramientas |
#1
|
||||
|
||||
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. |
|
#2
|
||||
|
||||
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 |
#3
|
||||
|
||||
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. 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!! |
#4
|
||||
|
||||
Un ejercicio muy interesante, pero aquí no se tira nadie a la piscina.
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. 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. 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) |
Gracias de parte de: | ||
#5
|
||||
|
||||
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í Código:
Obtener Ubicación v2 %campo = CYM [SI %gl_latitude < 35.95 Y %gl_longitude > -5.60] %campo = PCB [SI %campo INDEF] 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 Código:
FLASH %campo Mín: %pmin Máx: %pmax 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) |
#6
|
||||
|
||||
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 ] 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
|
#7
|
||||
|
||||
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 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(<) ] 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) |
#8
|
||||
|
||||
Es curioso que este tema ya tenga 300 lecturas y que nadie diga nada.
Terminaba yo mi soliloquio con esta pregunta retórica... 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 Código:
Arrays Merge ... (lo de arriba) Procesar Array [ %pyh - Tipo: Orden Numérico, Coma Flotante ] Establecer Variable [ %pmin = %pyh(>) ] Establecer Variable [ %pmax = %pyh(<) ] 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 ¿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 ] ¿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. |
#9
|
||||
|
||||
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). 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. |
#10
|
||||
|
||||
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
|
#11
|
||||
|
||||
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 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. 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) |
#12
|
||||
|
||||
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 ] 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
|
#13
|
||||
|
||||
Hombre, no me digas eso, que casi te he resuelto esto ...
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.
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. Es que tienes marcado "Calcular" en A7 y A8. 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 ] 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) |
#14
|
||||
|
||||
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.
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
|
#15
|
||||
|
||||
Pues me alegro. No lo había probado.
Expresión regular - Wikipedia Y hago pruebas, hasta que sale lo que quiero, en este otro sitio... https://regex101.com RECAPITULEMOS...
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) |
Gracias de parte de: | ||
#16
|
||||
|
||||
Hola.
Perdón por el retraso en responder, por causa de obligaciones familiares y otros asuntos sociales. Sigamos. 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 ] ... 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 ] 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
|
#17
|
||||
|
||||
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) |
#18
|
||||
|
||||
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
|
#19
|
||||
|
||||
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 |
|
#20
|
||||
|
||||
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 ] 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
|
Estás aquí | ||||||
|