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


 
Herramientas
  #21  
Viejo 26/11/21, 08:02:55
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Creo que lo puedes hacer con muchas menos de 20 acciones.

Sin meditarlo mucho (posible cagada)...
  • Generas un array con las horas a evitar (%evitarhoras)
  • Recorres ese array eliminando del array "paralelo" las posiciones que coincidan con cada hora+1. Me explico: si quieres evitar las 00 (tramo 00-01), en el array paralelo eso está en la posición 1=00+1.
  • Y luego sigues todo el proceso que ya tienes controlado.

Si no la he vuelto a cagar eso son cuatro/cinco acciones.

La pega que veo es que luego no podrás partir fácilmente ese array paralelo por una hora concreta. La solución; deja que lo piense un rato.

Última edición por WillyWeb Día 26/11/21 a las 16:47:07
Responder Con Cita


  #22  
Viejo 01/12/21, 10:05:32
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Me puese al tema unas horas después de soltar mi idea inicial pero no llegué a contar mis avances.

La historia comenzó descargando el JSON. Arreglando el temas de las comas. Y usando "Array Merge" para conseguir ese array "paralelo" (%pyh) de 24 elementos (uno por hora) con la forma "xxx.xx €/MWh de hh-hh" o similar.

Lo siguiente que hicimos fue ordenar ese array para facilitar la localización de los mejores precios/horas, pero antes vamos a evitar momentos poco convenientes por el motivo que sea (ausencia, siesta, etc).

Código:
MÉTODO 1

Establecer Array [ %evitar=12,03,04,02 y separador=, ]
Procesar Array [ %evitar Orden Alfabético Inverso ]
Para [ %pos en %evitar() ]
  Sacar de Array [ %pyh el elemento %pos ]
Fin Para
Este método requiere que las horas se escriban con dos dígitos para que sean ordenables alfabéticamente. ¿Y por qué ese ordenamiento? Pues para evitar un pequeño contratiempo que me he encontrado al eliminar los elementos del array.

Supongamos que en la siguiente lista queremos eliminar los elementos 01 y 02...

123.45 de 01-02 <
234.56 de 02-03 <
345.67 de 03-04
456.78 de 04-05

Al quitar el 01 la lista queda así..

234.56 de 02-03
345.67 de 03-04 <
456.78 de 04-05

Y como se puede observar el 02 ya no es el mismo de antes.

Eso lo evitamos quitando los elementos en orden inverso (desde abajo). Espero que se entienda.

Otro acercamiento sería establecer las horas que nos %valen en lugar de las que queremos %evitar.

Código:
MÉTODO 2

Establecer Variable [ %valen=12,3,4,2 ]
Establecer Array [ %pyh=%pyh(%valen) y seperador=, ]
Mucho más rápido y simple. No es necesario escribir las horas de ninguna forma especial ni ordenarlas. Y solo se usan dos acciones.

¿Tema resuelto?

Pues no. Ambos métodos tienen un pequeño fallo cuya detección y reparación dejo en vuestras manos. Pero vamos, que tampoco es imprescindible.

Última edición por WillyWeb Día 01/12/21 a las 12:06:36
Responder Con Cita
Gracias de parte de:
  #23  
Viejo 05/12/21, 13:57:28
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Estoy pendiente de continuar con la tarea del hilo en cuanto pueda; la pelota está en mi tejado.

Pero de momento os cuento otra cosa relacionada.
Un amigo tiene una casa con un termo eléctrico. La casa no tiene Wifi y por diferentes motivos no resulta oportuno hacer enlace desde el smartphone ni otras maniobras. O sea que no hay posibilidad de poner un enchufe "inteligente" con Wifi ni nada similar. Hay que buscar una solución más sencilla.

Hemos comprado un programador horario para que el termo solo esté encendido uno o dos ratos al día, en los momentos en que la electricidad suele tener precios normalmente bajos.
En la página
https://www.esios.ree.es/es/pvpc
he consultado los precios de la electricidad de los últimos 30 días. He anotado en una hoja de cálculo cuáles han sido las horas que me han parecido significativamente baratas de cada madrugada-mañana (AM) y de cada tarde-noche (PM). Luego he aplicado una suma para saber cuáles horas han sido las más ventajosas, en promedio mensual. En AM (y en el total diario de 24 horas), la hora de electricidad más barata suele ser de 4 a 5, seguida por poca diferencia de 3 a 4. En PM la hora más barata suele ser de 15 a 16.
Estadística horas electricidad barata.jpg
De momento vamos a programar para que el termo reciba electricidad de 4 a 5 y de 15 a 15:20. Con el uso habrá que ir viendo si ese plan es adecuado.
Si ocurre más de un día que en algún rato se acaba el agua caliente habrá que ampliar el horario de carga eléctrica y/o subir la temperatura del termo, que es regulable -hasta 80 grados máximo- y de momento está configurado solo a 70 grados.
Por el contrario, si ocurre que pasan las semanas y en todo momento hay agua caliente de sobra se podría probar a reducir el horario de carga eléctrica y/o bajar la temperatura del termo; bajar la temperatura del termo significaría que el agua alcanza la temperatura prevista en menos tiempo y entonces deja de calentar, por lo que también habrá menos consumo eléctrico.
Según el manual del termo, los 80 grados (el máximo) suelen alcanzarse tras hora y media, aunque eso también depende de la temperatura del agua de entrada; en función de esa referencia, me ha parecido oportuno programar una hora y veinte minutos para llegar a 70 grados.

Se agradecen comentarios y opiniones si alguien tiene una idea que pueda mejorar el planteamiento descrito.

Cuento todo esto de forma detallada porque lo ideal sería que nuestra tarea Tasker hiciese algo similiar (dar corriente a un termo eléctrico en ciertos ratos, por medio de un enchufe inteligente conectado a Internet), pero adaptándose cada día a las horas en que los precios sean más baratos, que como se ha visto en la tabla anterior, no siempre son las mismas horas.

Última edición por Caravantes Día 05/12/21 a las 13:59:37
Responder Con Cita
  #24  
Viejo 05/12/21, 21:00:03
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por Caravantes Ver Mensaje
Estoy pendiente de continuar con la tarea del hilo en cuanto pueda; la pelota está en mi tejado.
Ese es mi chico.

Cita:
Originalmente Escrito por Caravantes Ver Mensaje
Se agradecen comentarios y opiniones si alguien tiene una idea que pueda mejorar el planteamiento descrito.
A poco de empezar este proyecto estuve trasteando en las estadísticas de esa web que mencionas y no fui capaz de encontrar algo equivalente a la hoja de cálculo que te has fabricado. Tampoco busqué con demasiado ahínco ya que me pareció más entretenido sacar esos datos con una tarea.

Código:
Establecer Array [ %mejor = 24 elementos a 0 ]
Para [ %offset 0:-6 ]
  Parse/Format Date And Time [ Tipo: Now Output: yyyy-MM-dd Variable: ymd Offset: Días = %offset ]
  Solicitud HTTP [ https://api.esios.ree.es/archives/70/download_json?locale=es&date=%ymd ]
  Buscar y Reemplazar en Variable [ Variable: %http_data Buscar: (\d),(\d) Reemplazar Con: $1.$2 ]
  Arrays Merge [ Entrada: %http_data[PCB] de %http_data[Hora] Salida: %pyh ]
  Procesar Array [ %pyh Tipo: Orden Numérico, Coma-Flotante ]

  Para [ %ind 1:3 ]
    Buscar y Reemplazar en Variable [ Variable: %pyh(%ind) Buscar: \d\d$ Almacenar en Array: %hhh ]
    Sumar a Variable [ %mejor(%hhh1) +1 ]
  Fin Para
Fin Para
Flash [ %mejor() ]
Eso cuenta qué horas han sido las más baratas durante la última semana. Lo explico...
  • Creamos un array de 24 elementos (uno por hora) inicializados a 0 para ir contando cada vez que esa "hora" es la más barata.
  • Iniciamos un bucle para recorrer días desde hoy (%offset=0) hacia atrás (%offset=-6).
  • Con la acción "Parse/Format Date" sacamos la fecha correspondiente a hoy-%offset en el formato que requiere el API.
  • Descargamos los datos.
  • Cambiamos las comas por puntos en los valores numéricos.
  • Creamos el famoso array "paralelo" con precios y horas.
  • Y lo ordenamos por precio (recuerdo que los elementos tienen la forma "ppp.pp de hh-hh").

    -Ahora vamos a anotar las tres mejores horas de ese día.
  • Con un bucle de 1 a 3.
  • Extraemos los dos últimos dígitos del elemento %pyh(%ind) (ahora aclaro esto).
  • Sumamos 1 a esa hora %mejor que acabamos de extraer.
  • Fin de los bucles.
  • Mostramos el contenido del array %mejor()

La aclaración...

Recuerda que en los datos que descargamos la primera hora (00-01) está en el elemento 1 del array, la segunda (01-02) está en el 2... y así sucesivamente. Ya te habrás dado cuenta de que el segundo número de esa pareja equivale al índice del array en el que está guardado el valor. Al ir incrementando el contenido de ese índice estaremos contando las veces que esa hora es la mejor. Y si al final el valor más alto está en el índice 5 eso querrá decir que la mejor hora es de 04-05.

Dime que lo has entendido. No soy capaz de explicarlo más claro con menos palabras.

Un par de cositas más...

Me he dado cuenta de que al retroceder en el tiempo la segunda mejor hora va cambiando. Eso me hace pensar que no es buena idea analizar mucho más de una semana para no desvirtuar la estimación.

En mis pruebas me encontré con que algunas veces aparecen "empates" que, aunque pueden hacer pensar que las horas señaladas son igual de buenas, resulta que se dan como consecuencia de que una es tantas veces tercera como otra segunda. Ese error se puede "mitigar" dando un peso diferente a cada posición cambiando el +1 de la acción "Sumar a Variable" por esto otro... 4-%ind

Cita:
Originalmente Escrito por Caravantes Ver Mensaje
Cuento todo esto de forma detallada porque lo ideal sería que nuestra tarea Tasker hiciese algo similar (dar corriente a un termo eléctrico en ciertos ratos, por medio de un enchufe inteligente conectado a Internet), pero adaptándose cada día a las horas en que los precios sean más baratos, que como se ha visto en la tabla anterior, no siempre son las mismas horas.
Sí. Ese era el objetivo final. Y de momento creo que vamos bien.
Responder Con Cita
  #25  
Viejo 06/12/21, 21:40:25
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por WillyWeb Ver Mensaje
Dime que lo has entendido. No soy capaz de explicarlo más claro con menos palabras.

Perfectamente explicado y entendido. Muchas gracias.
Yo también había pensado que una tarea Tasker podría hacer esto. De hecho, creo recordar que en algún otro hilo se hablaba de una tarea Tasker que directamente iba generando una hoja de cálculo en drive (aunque igualmente me sirve generar un fichero TXT local con los valores separados por punto-y-coma; luego es bien fácil convertir eso a Excel), pero pensé que una tarea de ese tipo terminaría liándome más tiempo que hacer la tabla a mano, como lo he hecho, que me ha llevado solo unos 15 minutos.
Responder Con Cita
Gracias de parte de:
  #26  
Viejo 08/12/21, 23:31:29
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Hola a todos! Después de dos años de un casi abandono del foro (que no de Tasker pues alguna cosilla he hecho) entré la semana pasada y me interesó el tema propuesto. Me lo leí de cabo a rabo y copié el código colgado por @Caravantes en el post #14. Funcionaba!

A partir de él empecé a elaborar mi propio proyecto para conseguir que el programa me proporcionara datos y opciones para elegir en que horas era más favorable poner en marcha los grandes consumidores domésticos. Todo ello a partir de una escena en 2400x1080 cuyo enlace al xml es: https://pastebin.com/9KnAQxpd

De entrada, y a la vista de lo que se ha propuesto, detecto dos maneras de enfocar el tema:

1.- Obtener una hora u horas que habitualmente són más baratas para ajustar un programador al que se enchufe el aparato en cuestión. He visto dos opciones de hacerlo un par de post más arriba y creo que esto acabaria aquí ya que no hay una gestión contínua de los datos. Aparte de esto me permito dos observaciones: a) en ocasiones hay cortes de luz (al menos donde yo vivo) y la programación queda "desplazada" con el peligro de que el desplazamiento horario nos llevara a un horario "caro". b) Los sábados y domingos acostumbran a ser más "baratos" y por tanto lo ideal sería recurrir a un programador diario de 7 dias alimentado con bateria recargable desde el propio enchufe (bastante más caros).

2.- Que el programa nos proporcione las mejores horas en un rango especificado configurable (p.e. de 8 a 24 ó incluso total de 0 a 24) de manera que seleccionemos manualmente las horas (o pareja de horas consecutivas por si el ciclo de utilización es más largo) y nos establezca un perfil con una alarma para avisarnos. Más adelante, una vez encontrado el procedimiento para activar el enchufe por WiFi, seria fácil modificar el mismo perfil para que iniciara la conexión de la base automáticamente.

Este és, pués, el código basado en el que he referido, notablemente ampliado para las nuevas prestaciones y que incorpora las siguientes funciones:

- El dia cuyos datos se muestran en el recuadro de encabezamiento y los precios máximo y mínimo del dia.
- Mostrar los precios para las 24 horas ordenados por horas en una lista a la izquierda de la pantalla y en la que se han oscurecido las horas transcurridas (una pijadilla...).
- Mostrar en un recuadro el precio/hora actual y la posición o "ranking" en la relación de precios ordenados de menor a mayor. El color de fondo (verde, amarillo, rojo) se corrresponde con el "ranking".
- Selección del horario hábil para el que se mostrarán los resultados ordenados por precio.
- Mostrar la lista ordenada por precios de las horas en el horario seleccionado en un menú "scrollable"
- Mostrar la pareja de horas consecutivas con un precio más favorable (recuadro indicado 2H).
- Seleccionar dos alarmas pulsando en el recuadro correspondiente: una para 1 hora y otra para 2 horas. Estas alarmas se indican al lado del icono del reloj. Pueden eliminarse con una pulsación larga sobre la hora.
- Cambiar, a partir de las 21 h. entre mostrar los precios para hoy y para mañana pulsando sobre el icono de actualizar que está programado como conmutador continuo.

El código que adjunto en formato texto está bastante comentado pero en catalán. No creo que suponga un problema. Los nombres de variables del código original se han mantenido.

Código:
    Tarea: Gestio Tarifes
    
    <Obtenim la data d'avui %data_consulta en format "yyyy-MM-dd">
    A1: Parse/Format DateTime [
         Tipo de Entrada: Now (Current Date And Time)
         Output Format: yyyy-MM-dd
         Formatted Variable Names: %data_consulta
         Output Offset Type: Ninguno
         Continuar Tarea Tras Error:Encendido ]
        Si (if)  [ %data_consulta ~ %* ]
    
    A2: Solicitud HTTP [
         Método: GET
         URL: https://api.esios.ree.es/archives/70/download_json?locale=es&date=%data_consulta
         Tiempo Límite (Segundos): 30
         Structure Output (JSON, etc): Encendido ]
    
    A3: Buscar y Reemplazar en Variable [
         Variable: %http_data
         Buscar: (\d),(\d)
         Reemplazar Coincidencias: Encendido
         Reemplazar Con: $1.$2 ]
    
    A4: Si (if) [ %Prima ~ %* ]
    
        A5: Establecer Variable [
             Nombre: %Prima
             A: 8
             Dígitos de Redondeo Máximos: 3
             Structure Output (JSON, etc): Encendido ]
    
        A6: Establecer Variable [
             Nombre: %Nona
             A: 24
             Dígitos de Redondeo Máximos: 3
             Structure Output (JSON, etc): Encendido ]
    
    A7: Fin Si (end if)
    
    A8: Establecer Variable [
         Nombre: %hora
         A: %TIME
         Dígitos de Redondeo Máximos: 3
         Structure Output (JSON, etc): Encendido ]
    
    A9: Separar Variable [
         Nombre: %hora
         Separador: . ]
    
    A10: Establecer Variable [
          Nombre: %hora
          A: %hora1
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    
    A11: JavaScriptlet [
          Código: var verd = "#FF005A29";
         var vermell = "#92FF0000";
         var color = "#FFEF9013";
          Salida Automática: Encendido
          Tiempo Límite (Segundos): 45 ]
    
    <Obtenim la data actual %avui_barres en format "dd/MM/yyyy">
    A12: Parse/Format DateTime [
          Tipo de Entrada: Now (Current Date And Time)
          Output Format: dd/MM/yyyy
          Formatted Variable Names: %avui_barres
          Output Offset Type: Ninguno
          Continuar Tarea Tras Error:Encendido ]
    
    <Obtenim la data de la consulta feta en format "dd/MM/yyyy">
    A13: Establecer Variable [
          Nombre: %dia_barres
          A: %http_data[Dia](1)
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    
    <Fem que %pyh sigui la matriu amb els preus per les 24 hores del dia i després els ordenem per PREU…>
    A14: Arrays Merge [
          Nombres: %http_data[PCB]
         %http_data[Hora]
          Merge Type: Simple
          Ensamblador:  de 
          Salida: %pyh ]
    
    A15: Procesar Array [
          Matriz de Variables (array): %pyh
          Tipo: Orden Numérico, Coma-Flotante ]
    
    <Matriu amb tots els preus i hores ordenats per HORES tal com surten del JSON per mostrar-les a la columna de l'esquerra…>
    A16: Arrays Merge [
          Nombres: %http_data[PCB]
         %http_data[Hora]
          Merge Type: Simple
          Ensamblador:  €/MWh de 
          Salida: %total ]
    
    <Per veure les hores ja passades i mostrar-les en un menú enfosquit sobreposat i només si la data es avui…>
    A17: Establece Array [
          Matriz de Variables (array): %passades
          Valores: %total(:%hora)
          Separador: , ]
        Si (if)  [ %hora > 0 & %dia_barres ig %avui_barres ]
    
    <Calcular els preus màxim i mínim del dia…>
    A18: Establecer Variable [
          Nombre: %pmax
          A: %pyh(<)
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    
    A19: Establecer Variable [
          Nombre: %pmin
          A: %pyh(>)
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    
    <Si ja ha passat la primera hora fixada inicia la llista ordenada d'hores més barates a partir l'hora %prima…>
    A20: Si (if) [ %hora > %Prima & %dia_barres ig %avui_barres ]
    
        A21: Establecer Variable [
              Nombre: %prima
              A: %hora+1
              Calcular: Encendido
              Dígitos de Redondeo Máximos: 1
              Structure Output (JSON, etc): Encendido ]
    
    A22: En Otro Caso (else)
    
        A23: Establecer Variable [
              Nombre: %prima
              A: %Prima+1
              Calcular: Encendido
              Dígitos de Redondeo Máximos: 1
              Structure Output (JSON, etc): Encendido ]
    
    A24: Fin Si (end if)
    
    <Matriu de PREUS per les hores seleccionades de %Prima a %Nona…>
    A25: Establece Array [
          Matriz de Variables (array): %pre_pers
          Valores: %http_data[PCB](%prima:%Nona)
          Separador: , ]
    
    <Matriu de les HORES seleccionades…>
    A26: Establece Array [
          Matriz de Variables (array): %hora_pers
          Valores: %http_data[Hora](%prima:%Nona)
          Separador: , ]
    
    A27: Arrays Merge [
          Nombres: %pre_pers
         %hora_pers
          Merge Type: Simple
          Ensamblador:  de 
          Salida: %seleccio ]
    
    <Ordena la llista de Preu/hora des de l'hora actual fins l'hora %Nona…>
    A28: Procesar Array [
          Matriz de Variables (array): %seleccio
          Tipo: Orden Numérico, Coma-Flotante ]
    
    A29: Establecer Variable [
          Nombre: %result
          A:  - - - -
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
        Si (if)  [ %result ~ %* ]
    
    <------------------------- INICI Determinació DUPLA hores més barates>
    A30: Ancla
    
    A31: Establecer Variable [
          Nombre: %limit
          A: %Nona-1
          Calcular: Encendido
          Dígitos de Redondeo Máximos: 1
          Structure Output (JSON, etc): Encendido ]
    
    <Salta la determinació de la DUPLA d'hores si només en queda una….>
    A32: Ir A [
          Tipo: Etiqueta de Acción
          Etiqueta: ---------------------------- FINAL Determinació dues hores més barates ]
        Si (if)  [ %seleccio(#) ~ 1 ]
    
    A33: Si (if) [ %hora < %limit | %dia_barres !~ %avui_barres ]
    
        A34: Establecer Variable [
              Nombre: %penult
              A: %seleccio(#)-1
              Calcular: Encendido
              Dígitos de Redondeo Máximos: 1
              Structure Output (JSON, etc): Encendido ]
    
        A35: Establecer Variable [
              Nombre: %minim
              A: 999.99
              Dígitos de Redondeo Máximos: 3
              Structure Output (JSON, etc): Encendido ]
    
        A36: Para (for) [
              Variable: %pri
              Ítems: 1:%penult
              Structure Output (JSON, etc): Encendido ]
    
            A37: Establecer Variable [
                  Nombre: %seg
                  A: %pri+1
                  Calcular: Encendido
                  Dígitos de Redondeo Máximos: 1
                  Structure Output (JSON, etc): Encendido ]
    
            A38: Sección de Variable [
                  Nombre: %seleccio(%pri)
                  De: 1
                  Longitud: 6
                  Encajar: Encendido
                  Almacenar Resultado En: %primera ]
    
            A39: Sección de Variable [
                  Nombre: %seleccio(%seg)
                  De: 1
                  Longitud: 6
                  Encajar: Encendido
                  Almacenar Resultado En: %segona ]
    
            A40: Establecer Variable [
                  Nombre: %suma
                  A: %primera+%segona
                  Calcular: Encendido
                  Dígitos de Redondeo Máximos: 2
                  Structure Output (JSON, etc): Encendido ]
    
            A41: Si (if) [ %suma < %minim ]
    
                A42: Establecer Variable [
                      Nombre: %minim
                      A: %suma
                      Dígitos de Redondeo Máximos: 3
                      Structure Output (JSON, etc): Encendido ]
    
                A43: Establecer Variable [
                      Nombre: %result
                      A: %seleccio(%pri)
                     %seleccio(%seg)
                      Dígitos de Redondeo Máximos: 3
                      Structure Output (JSON, etc): Encendido ]
    
                A44: Establecer Variable [
                      Nombre: %hora_inici
                      A: %seleccio(%pri)
                      Dígitos de Redondeo Máximos: 3
                      Structure Output (JSON, etc): Encendido ]
    
                A45: Separar Variable [
                      Nombre: %hora_inici
                      Separador: de  ]
    
                A46: Separar Variable [
                      Nombre: %hora_inici2
                      Separador: - ]
    
            A47: Fin Si (end if)
    
        A48: Fin Para (end for)
    
        A49: Establecer Variable [
              Nombre: %hora_inici
              A: %hora_inici21:00
              Dígitos de Redondeo Máximos: 3
              Structure Output (JSON, etc): Encendido ]
    
    A50: Fin Si (end if)
    
    <---------------------------- FINAL Determinació dues hores més barates>
    A51: Ancla
    
    <Cerca el preu de l'hora actual…>
    A52: Para (for) [
          Variable: %cont
          Ítems: 0:24
          Structure Output (JSON, etc): Encendido ]
    
        A53: Si (if) [ %pyh(%cont) ~ * de %hora-* ]
    
            A54: Establecer Variable [
                  Nombre: %valor_actual
                  A: %pyh(%cont)
                  Dígitos de Redondeo Máximos: 3
                  Structure Output (JSON, etc): Encendido ]
    
            A55: Separar Variable [
                  Nombre: %valor_actual
                  Separador:  de ]
    
            A56: Establecer Variable [
                  Nombre: %preu_actual
                  A: %valor_actual1
                  Dígitos de Redondeo Máximos: 3
                  Structure Output (JSON, etc): Encendido ]
    
            A57: Establecer Variable [
                  Nombre: %hora_actual
                  A: %valor_actual2
                  Dígitos de Redondeo Máximos: 3
                  Structure Output (JSON, etc): Encendido ]
    
            <surt del bucle per poder posar %cont com a valor del ranking d'hores mes barates….>
            A58: Ir A [
                  Tipo: Etiqueta de Acción
                  Etiqueta: Hora trobada ]
    
        A59: Fin Si (end if)
    
    A60: Fin Para (end for)
    
    <Hora trobada>
    A61: Ancla
    
    A62: Establecer Variable [
          Nombre: %color
          A: %verd
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
        Si (if)  [ %cont < 9 ]
    
    A63: Establecer Variable [
          Nombre: %color
          A: %vermell
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
        Si (if)  [ %cont > 16 ]
    
    A64: Establecer Variable [
          Nombre: %Alarma1
          A: - -
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
        Si (if)  [ %Alarma1 ~ %* ]
    
    A65: Establecer Variable [
          Nombre: %Alarma2
          A: - -
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
        Si (if)  [ %Alarma2 ~ %* ]
    
    A66: Destruir Escena [
          Nombre: Q_ELECT
          Continuar Tarea Tras Error:Encendido ]
    
    A67: Mostrar Escena [
          Nombre: Q_ELECT
          Mostrar Como: Diálogo, Fondo Muy Oscurecido
          Posición Horizontal: 100
          Posición Vertical: 100
          Animación: Derecha
          Continuar Tarea Inmediatamente: Encendido
          Allow Outside Boundaries: Encendido
          Blocking Overlay +: Encendido
          Overlay +: Encendido ]
Agradecimiento a las aportaciones de @WillyWeb que nos enseña a pescar. En concreto he aprendido el uso de los símbolos (<) y (>) para obtener los valores mayor y menor de una matriz, el uso del comando Parse/Format Data Time que desconocia y, en particular, del parámetro offset. Gracias!
Imágenes Adjuntas
Tipo de Archivo: jpg Screenshot_2021-12-08.jpg (73.7 KB, 36 visitas)

Última edición por cace0353 Día 08/12/21 a las 23:48:03
Responder Con Cita
Los siguientes 2 usuarios han agradecido a cace0353 su comentario:
  #27  
Viejo 09/12/21, 07:53:15
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por cace0353 Ver Mensaje
Agradecimiento a las aportaciones de @WillyWeb que nos enseña a pescar...
La leche, me has emocionado.

Y la tarea tiene una pinta y unas funcionalidades impresionantes.
Responder Con Cita
Gracias de parte de:
  #28  
Viejo 09/12/21, 16:30:03
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Lo siento :-(. Hay un error en la selección del grupo de dos horas más barato. Tal como está escrito siempre saldràn seleccionadas las dos primeras horas de la lista, aunque no sean consecutivas por horas, porque la suma serà inferior a cualquier otro par!.
Revisando esta parte. El resto funciona correctamente…

Última edición por cace0353 Día 09/12/21 a las 22:29:40
Responder Con Cita
Gracias de parte de:
  #29  
Viejo 09/12/21, 22:41:05
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Hola Cace; encantado de verte y más encantado de que intervengas con una aportación tan fantástica y completa. Gracias.

Cita:
Originalmente Escrito por cace0353 Ver Mensaje
a) en ocasiones hay cortes de luz (al menos donde yo vivo) y la programación queda "desplazada" con el peligro de que el desplazamiento horario nos llevara a un horario "caro".
Supongo que este párrafo te refieres al tema que yo comenté, del termo sin enchufe inteligente ni conexión a Internet. Hemos comprado un "Programador digital Garza 400602" que lleva batería (igual que los relojes digitales) y mantiene correctamente la hora aunque se produzca un corte de corriente. No hay desplazamiento horario.

Cita:
Originalmente Escrito por cace0353 Ver Mensaje
b) Los sábados y domingos acostumbran a ser más "baratos" y por tanto lo ideal sería recurrir a un programador diario de 7 dias alimentado con bateria recargable desde el propio enchufe (bastante más caros).
El dispositivo que te he mencionado admite hasta 8 programas (secuencias de encendido/apagado), y cualquiera de esos 8 programas puede ajustarse para que se ejecute para todos los días o para ciertos días concretos de la semana, o para los fines de semana (sábados y domingos), etc. Este cacharrito cuesta unos 10 euros en Amazon, Leroy Merlín y otros sitios similares. A mí no me parece caro.

Por otro lado, tanto un termo eléctrico como un sistema de calefacción puede mantener una eficacia razonable si recibe alimentación eléctrica al menos una vez al día. Hace años tuve tarifa nocturna y usaba un programador de ese tipo para que el termo eléctrico tomase energía de 7 a 8 de la mañana; el agua del termo se mantenía caliente todo el día. También tenía acumuladores térmicos que se "calentaban" por la noche e iban soltando el calor a lo largo de la jornada. Pero es impensable que cosas de este tipo puedan "cargarse" solo durante el fin de semana. Aunque sería más barato, para el martes el agua del termo ya no estaría caliente y los acumuladores térmicos ya habrían soltado el 90% del calor que hubieran acumulado, por lo que cada semana te quedarías varios días sin agua caliente y/o sin calefacción.
Responder Con Cita
  #30  
Viejo 10/12/21, 00:27:02
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Bueno, el error se debia a que calculaba la dupla de horas más baratas a partir de la matriz ordenada por los precios en lugar de hacerlo con la ordenada por las horas.

He modificado la sección del código donde se determina este par de horas. Para ello he definido de nuevo la matriz de precios de las horas restantes en A31 (%restants).
Por tanto, y en resumen: aparece una acción nueva (A31) y se cambian las referencias a la matriz %seleccio por %restants. El resto de código permanece igual.

Código:
    <------------------------- INICI Determinació DUPLA hores més barates>
    A30: Ancla
    
    <Llista de Preu/hora des de l'hora actual fins l'hora %Nona ORDENAT PER HORES…>
    A31: Arrays Merge [
          Nombres: %pre_pers
         %hora_pers
          Merge Type: Simple
          Ensamblador:  de 
          Salida: %restants ]
    
    A32: Establecer Variable [
          Nombre: %limit
          A: %Nona-1
          Calcular: Encendido
          Dígitos de Redondeo Máximos: 1
          Structure Output (JSON, etc): Encendido ]
    
    <Salta la determinació de la DUPLA d'hores si només en queda una….>
    A33: Ir A [
          Tipo: Etiqueta de Acción
          Etiqueta: ---------------------------- FINAL Determinació dues hores més barates ]
        Si (if)  [ %restants(#) ~ 1 ]
    
    A34: Si (if) [ %hora < %limit | %dia_barres !~ %avui_barres ]
    
        A35: Establecer Variable [
              Nombre: %penult
              A: %restants(#)-1
              Calcular: Encendido
              Dígitos de Redondeo Máximos: 1
              Structure Output (JSON, etc): Encendido ]
    
        A36: Establecer Variable [
              Nombre: %minim
              A: 999.99
              Dígitos de Redondeo Máximos: 3
              Structure Output (JSON, etc): Encendido ]
    
        A37: Para (for) [
              Variable: %pri
              Ítems: 1:%penult
              Structure Output (JSON, etc): Encendido ]
    
            A38: Establecer Variable [
                  Nombre: %seg
                  A: %pri+1
                  Calcular: Encendido
                  Dígitos de Redondeo Máximos: 1
                  Structure Output (JSON, etc): Encendido ]
    
            A39: Sección de Variable [
                  Nombre: %restants(%pri)
                  De: 1
                  Longitud: 6
                  Encajar: Encendido
                  Almacenar Resultado En: %primera ]
    
            A40: Sección de Variable [
                  Nombre: %restants(%seg)
                  De: 1
                  Longitud: 6
                  Encajar: Encendido
                  Almacenar Resultado En: %segona ]
    
            A41: Establecer Variable [
                  Nombre: %suma
                  A: %primera+%segona
                  Calcular: Encendido
                  Dígitos de Redondeo Máximos: 2
                  Structure Output (JSON, etc): Encendido ]
    
            A42: Si (if) [ %suma < %minim ]
    
                A43: Establecer Variable [
                      Nombre: %minim
                      A: %suma
                      Dígitos de Redondeo Máximos: 3
                      Structure Output (JSON, etc): Encendido ]
    
                A44: Establecer Variable [
                      Nombre: %result
                      A: %restants(%pri)
                     %restants(%seg)
                      Dígitos de Redondeo Máximos: 3
                      Structure Output (JSON, etc): Encendido ]
    
                A45: Establecer Variable [
                      Nombre: %hora_inici
                      A: %restants(%pri)
                      Dígitos de Redondeo Máximos: 3
                      Structure Output (JSON, etc): Encendido ]
    
                A46: Separar Variable [
                      Nombre: %hora_inici
                      Separador: de  ]
    
                A47: Separar Variable [
                      Nombre: %hora_inici2
                      Separador: - ]
    
            A48: Fin Si (end if)
    
        A49: Fin Para (end for)
    
        A50: Establecer Variable [
              Nombre: %hora_inici
              A: %hora_inici21:00
              Dígitos de Redondeo Máximos: 3
              Structure Output (JSON, etc): Encendido ]
    
    A51: Fin Si (end if)
    
    <---------------------------- FINAL Determinació dues hores més barates>
    A52: Ancla
@Caravantes Lo del precio/hora en los fines de semana lo decia porque altera los datos estadísticos si calculas las medias de 5 ó 6 dias pasados y coges un fin de semana entre los ellos.

El programa debe completarse con el perfil o perfiles necesarios para que te avise a las horas de conectar los aparatos que hubieras programado en la escena.
Si se logra activar un enchufe por WiFi podria ejecutarse automáticamente la tarea (sin escena) a las 00:00 y que ella se encargara de arrancar los aparatos a la hora más favorable...

Última edición por cace0353 Día 10/12/21 a las 00:37:19
Responder Con Cita
Gracias de parte de:
  #31  
Viejo 12/12/21, 12:47:06
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por cace0353 Ver Mensaje
Bueno, el error se debía a que calculaba la dupla de horas más baratas a partir de la matriz ordenada por los precios en lugar de hacerlo con la ordenada por las horas.
Veamos si lo he entendido.

Partes de un subconjunto de los datos originales en su orden natural (por horas). Creas el array "paralelo" (nombre pendiente de patente) que recorres hasta el penúltimo elemento sumando el precio de cada hora con el de la siguiente. Y si esa suma resulta ser el valor más bajo encontrado ya tienes localizadas las dos horas consecutivas con el mejor precio ... ¿correcto?



Código:
%min = 1000
Para [ %aaa de 1:23 ]
  %bbb = %aaa + 1
  %sum = %http_data[PCB](%aaa) + %http_data[PCB](%bbb)
  %xxx = %aaa [ SI %sum < %min ]
  %min = %sum [ SI %sum < %min ]
Fin Para
%bbb = %xxx + 1
%aaa = %http_data[PCB](%xxx) de %http_data[Hora](%xxx)
%bbb = %http_data[PCB](%bbb) de %http_data[Hora](%bbb)
Eso es una versión simplificada del mismo procedimiento, por cierto muy elegante , que saca las DOS mejores horas consecutivas del DÍA, momento ideal para poner una lavadora, el lavaplatos o encender el calentador.

Si quieres analizar un rango concreto de horas solo tienes que modificar el "1:23" del bucle (o usar variables). Y si quieres un rango de más de dos horas los cambios tampoco son complicados.

Última edición por WillyWeb Día 12/12/21 a las 12:52:56
Responder Con Cita
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario:
  #32  
Viejo 12/12/21, 16:23:36
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Pensaba que el algoritmo anterior ya era lo más simple posible, pero cuando lo he probado en Tasker me he dado cuenta de que se podía mejorar ligeramente. Y sí, confieso que los "retazos" de código que voy proponiendo para este proyecto los escribo sin haberlos probado antes.

Al tema...

Código:
%min = 9999
Para [ %ind1 de 1:23 ]
  Establecer Múltiples Variables [ Nombres: %ind2,%pre1,%pre2 Valores: %ind1+1,%http_data[PCB](%ind1),%http_data[PCB](%ind2) Calcular: Sí ]
  Establecer Múltiples Variables [ Nombres: %res1,%res2,%min Valores: %ind1,%ind2,%pre1+%pre2 Calcular: Sí ] [ SI %pre1+%pre2 < %min ]
Fin Para
Al finalizar ese bucle tendremos el array %res() con los índices de las dos (o las que quieras) mejores horas consecutivas del periodo analizado (todo el día en este ejemplo).
Responder Con Cita
Los siguientes 2 usuarios han agradecido a WillyWeb su comentario:
  #33  
Viejo 12/12/21, 16:41:14
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Ostras WillyWeb, desconocia totalmente lo de asignar multiples variables en Tasker con una única instrucción. Siempre lo hacia con un javascriplet de múltiples lineas.
Mañana, cuando tenga un rato, lo pruebo!
He vuelto a pescar un pez!
Responder Con Cita
Los siguientes 2 usuarios han agradecido a cace0353 su comentario:
  #34  
Viejo 12/12/21, 20:19:39
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Bueno, parece que nadie se atreve con el paso final.

Se supone que ya tenemos las horas "buenas" y ahora toca encender/apagar el termo, lavaplatos, radiador o lo que sea.

¿Con qué?

¿Cómo?
  • Con algún perfil de hora y sus correspondientes variables que marquen el momento de encendido/apagado.
  • Con alguna tarea para componer y enviar a IFTTT la URL que Webhooks necesita.

Me suena que de esto ya hemos hablado antes.

Bueno, ir mirando esas cosas. Por cierto, ojo con la corriente máxima que pueda aguantar el enchufe (o interruptor) elegido. Si no lo tenéis claro lo estudiamos con calma.

**EDITO**

En algunos casos el enchufe WiFi no es una opción porque es necesario pulsar un botón físico para que el aparto se ponga en marcha. Entonces hace falta un chisme como este...

SwitchBot junto con SwitchBot Hub Mini.

O como estos otros...

https://www.amazon.es/Riiai-Interrup.../dp/B095YMVHFX

https://es.aliexpress.com/item/1005003535335637.html

https://es.aliexpress.com/item/1005003061028654.html

Última edición por WillyWeb Día 12/12/21 a las 21:22:01
Responder Con Cita
  #35  
Viejo 12/12/21, 22:10:08
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por WillyWeb Ver Mensaje
Al finalizar ese bucle tendremos el array %res() con los índices de las dos (o las que quieras) mejores horas consecutivas del periodo analizado (todo el día en este ejemplo).
Bueno, @WillyWeb, pues he incorporado tu propuesta de compresión del código para determinar la dupla de horas consecutivas más favorables por precio adaptándolo a mis necesidades:

a) Calcula sólo a partir de la hora actual hasta la hora fijada como %Nona (normalmente las 24:00 pero configurable en la escena mediante un "consulta de variable").

b) Hay un condicional SI para ejecutar esta parte de código desde la primera hora %Prima si se está mostrando la lista del dia sigüiente (como opción conmutable en la escena a partir de las 21:00)

c) He añadido unas instrucciones adicionales para separar la primera hora del grupo y darle el formato HH:MM que se asigna a la variable global %Alarma2 y que, mediante el correspondiente perfil activará un aviso o arrancará el enchufe WiFi...

Ajunto el código entre las dos Anclas o comentarios que deberia substituirse con el ahorro de 8 acciones...

Código:
<------------------------- INICI Determinació DUPLA hores més barates>
    A30: Ancla
    
    A31: Establecer Variable [
          Nombre: %limit
          A: %Nona-1
          Calcular: Encendido
          Dígitos de Redondeo Máximos: 1
          Structure Output (JSON, etc): Encendido ]
    
    <Salta la determinació de la DUPLA d'hores si només en queda una….>
    A32: Ir A [
          Tipo: Etiqueta de Acción
          Etiqueta: ---------------------------- FINAL Determinació dues hores més barates ]
        Si (if)  [ %seleccio(#) ~ 1 ]
    
    A33: Si (if) [ %hora < %limit | %dia_barres !~ %avui_barres ]
    
        A34: Establecer Variable [
              Nombre: %minim
              A: 9999
              Calcular: Encendido
              Dígitos de Redondeo Máximos: 1
              Structure Output (JSON, etc): Encendido ]
    
        A35: Para (for) [
              Variable: %pri
              Ítems: %hora:%limit
              Structure Output (JSON, etc): Encendido ]
    
            A36: Establecer Múltiples Variables [
                  Nombres: %seg,%pre1,%pre2
                  Valores: %pri+1,%http_data[PCB](%pri),%http_data[PCB](%seg)
                  Calcular: Encendido
                  Dígitos de Redondeo Máximos: 2
                  Structure Output (JSON, etc): Encendido ]
    
            A37: Establecer Múltiples Variables [
                  Nombres: %res1,%res2,%minim
                  Valores: %pri,%seg,%pre1+%pre2
                  Calcular: Encendido
                  Dígitos de Redondeo Máximos: 2
                  Structure Output (JSON, etc): Encendido ]
                Si (if)  [ %pre1+%pre2 < %minim ]
    
        A38: Fin Para (end for)
    
    A39: Fin Si (end if)
    
    A40: Establecer Variable [
          Nombre: %hora_inici
          A: %http_data[Hora](%res1)
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    
    A41: Establecer Variable [
          Nombre: %result
          A: %http_data[PCB](%res1)%http_data[Hora](%res1)
          %http_data[PCB](%res2) de %http_data[Hora](%res2)
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    
    A42: Separar Variable [
          Nombre: %hora_inici
          Separador: - ]
    
    A43: Establecer Variable [
          Nombre: %hora_inici
          A: %hora_inici1:00
          Dígitos de Redondeo Máximos: 3
          Structure Output (JSON, etc): Encendido ]
    
    <---------------------------- FINAL Determinació dues hores més barates>
    A44: Ancla
*** EDITO ***

A pesar de que las horas seleccionadas són correctas los precios mostrados en la escena no lo són, siempre muestra los de las últimas dos horas del bucle...

Detectado el error de que no se muestran los precios mínimos he modificado la accion A41 y ya está resuelto...

Última edición por cace0353 Día 13/12/21 a las 09:51:20
Responder Con Cita
Gracias de parte de:
  #36  
Viejo 12/12/21, 22:31:14
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
En A41 haces una suposición que no siempre es cierta. Al salir del bucle las variables %pre1 y %pre2 puede que no tengan el precio de las dos horas emparejadas. Si lo haces así...

%result =
%http_data[PCB](%res1) de %http_data[Hora](%res1)
%http_data[PCB](%res2) de %http_data[Hora](%res2)

...problema resuelto.

Y para definir %hora_inici puedes hacer esto...

%hora_inici = %http_data[Hora](%res1)
Buscar y Reemplazar [ En: %hora_inici Buscar: -\d\d$ Reemplazar: :00 ]

O esto otro...

Sección de Variable [ %http_data[Hora](%res1) De:1 Longitud: 2 Almacenar en: %hora_inici ]
%hora_inici = %hora_inici:00

Última edición por WillyWeb Día 12/12/21 a las 22:58:48
Responder Con Cita
Gracias de parte de:
  #37  
Viejo 12/12/21, 23:09:12
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por WillyWeb Ver Mensaje
En A41 haces una suposición que no siempre es cierta. Al salir del bucle las variables %pre1 y %pre2 puede que no tengan el precio de las dos horas emparejadas. Si lo haces así...

%result =
%http_data[PCB](%res1) de %http_data[Hora](%res1)
%http_data[PCB](%res2) de %http_data[Hora](%res2)

...problema resuelto.
OK!
Gracias…
Responder Con Cita
Gracias de parte de:
  #38  
Viejo 13/12/21, 00:38:44
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por WillyWeb Ver Mensaje
¿Con qué? Con un enchufe compatible con Tuya o Smart Life (son básicamente lo mismo)...
¿Cómo? Con algún perfil de hora y sus correspondientes variables que marquen el momento de encendido/apagado.
Hace dos años se hizo otro hilo específico para abordar ese tema con detalle:
Controlar relé Wifi desde tasker https://www.htcmania.com/showthread.php?t=1525110

Me ha parecido oportuno continuar esta parte de la conversación en ese hilo que ya existe dedicado a ese asunto. Quien quiera ir directamente a mi post, puede hacerlo en
https://www.htcmania.com/showthread....0#post33388600

Gracias, Willy, por tus inestimabes aportaciones en ambos hilos.
Responder Con Cita
Gracias de parte de:
  #39  
Viejo 13/12/21, 11:24:30
Avatar de cace0353
cace0353 cace0353 no está en línea
Usuario muy activo
Mensajes: 504
 
Fecha de registro: may 2010
Localización: Arenys de Mar (B)
Mensajes: 504
Modelo de smartphone: Pixel 8 Pro - 256 Gb.
Versión de ROM: Stock
Versión de Radio: Stock
Tu operador: Jazztel
Mencionado: 11 comentarios
Tagged: 0 hilos
Me engancho de nuevo.

Para probar la propuesta de @WillyWeb para ejecutar el tramo de determinación de la dupla, cloné mi tarea y realicé los cambios en ella.
Una vez funciona todo correctamente me parecia que la tarea modificada era màs lenta y he puesto controles de tiempo (%TIMEMS) al inicio y al final de este fragmento de código en ambas tareas guardando las salidas (%tiemp_fin - %tiemp_ini) en un archivo de texto en modo "Añadir nueva linea".

He aquí los resultados para 5 ejecuciones alternadas:

Cace0353: 72
WillyWeb: 437
Cace0353: 95
WillyWeb: 420
Cace0353: 115
WillyWeb: 405
Cace0353: 75
WillyWeb: 413
Cace0353: 111
WillyWeb: 396

Sorprendentemente el código mas "pedreste" ha resultado ser mas rapido de ejecución!

De todas formas hemos aprendido cosas nuevas…

Gracias!
Responder Con Cita
Gracias de parte de:


  #40  
Viejo 13/12/21, 11:42:48
Avatar de WillyWeb
WillyWeb WillyWeb no está en línea
Usuario muy activo
Mensajes: 2,067
 
Fecha de registro: dic 2008
Localización: Hoy aquí y mañana allí
Mensajes: 2,067
Modelo de smartphone: OnePlus 3T | Xiaomi 9T Pro
Versión de ROM: OxygenOS 9.0.6 | MIUI 12.5.1
Versión de Radio: Stock
Tu operador: Vodafone
Mencionado: 75 comentarios
Tagged: 3 hilos
Cita:
Originalmente Escrito por cace0353 Ver Mensaje
Sorprendentemente el código mas "pedreste" ha resultado ser mas rapido de ejecución!


Está claro que esa acción de "Establecer Múltiples Variables" está poco pulida. Gracias por tomarte el tiempo de hacer la comprobación.

Por cierto, tienes un cronómetro interno muy fino para deterctar diferencias de apenas 300 milisegundos.
Responder Con Cita
Gracias de parte de:
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Otro software para Android > Tasker


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 21:35:33 (GMT +2)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007