PDA

Ver la Versión Completa : [ CONSULTA ] Ajustar brillo con Tasker según el nivel de luz


Mitrhandir
26/01/16, 17:15:29
Hola amigos taskeririanos!
Aquí os dejo otro reto

Perfil: Screen On (53)
Priority: 50
Estado: Estado Pantalla [ Está:Si ]
Entrada: Screen On (42)
A1: Detener Ubicación [ Origen:Cualquiera ]
A2: Auto-Sincr. [ Establecer:Apagado ]
A3: Rotación de pantalla [ Establecer:Apagado ]
A4: Brillo de pantalla [ Nivel:0 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 0 & %LIGHT < 20 ]
A5: Brillo de pantalla [ Nivel:75 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 21 & %LIGHT < 95 ]
A6: Brillo de pantalla [ Nivel:255 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 96 ]

El asunto no es otro que tratar de ahorrar batería, así que he creado este perfil (que no me funciona, por cierto), a ver si alguien puede ayudar. Porque he probado de todas las maneras habidas y por haber, sólo que no he dado con la tecla adecuada. Espero vuestras opiniones! :ok:

WillyWeb
26/01/16, 17:33:07
Antes te he comentado que estabas intentando que un estado se comportase como un evento.

Cuando el disparador de un perfil es un estado Tasker espera hasta que se cumple la condición definida (pantalla encendida en tu caso). Entonces el contexto se activa y se ejecuta la tarea de entrada. Mientras que el estado no cambie (pantalla apagada en tu caso) ese contexto permanecerá activado (marcado en verde) y Tasker no ejecutará ninguna tarea relacionada con el mismo. Cuando el perfil deje de estar activo (pantalla apagada en tu caso) se ejecutará la tarea de salida.

Si lo que pretendes es que el brillo se ajuste al cambiar las condiciones de luz deberías monitorizar los cambios de valor de la variable de Tasker %LIGHT. Eso es un evento, no un estado. Al disparar el perfil con un evento la tarea asociada (que sólo puede ser de entrada) se ejecutará cada vez que se produzca el evento (un cambio de luz en tu caso).

Mitrhandir
26/01/16, 17:42:00
Perfil: Screen On (53)
Priority: 50
Evento: Pantalla encendida
Entrada: Screen On (42)
A1: Brillo de pantalla [ Nivel:0 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 0 & %LIGHT < 100 ]
A2: Brillo de pantalla [ Nivel:75 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 101 & %LIGHT < 474 ]
A3: Brillo de pantalla [ Nivel:255 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 475 ]

Ahora lo tengo así y va de lujo! Por lo visto, cuando se trata de variables, los valores son otros. Dependerá creo yo del modelo de teléfono o del sensor. Falta ajustarlo un poquito ,pero por lo menos, ya no son 3 perfiles para hacer lo mismo.

Cómo lo ves, WillyWeb?

WillyWeb
26/01/16, 18:13:31
Perfil: Screen On (53)
...
Evento: Pantalla encendida
...

Cómo lo ves, WillyWeb?

Pues que si lo que quieres es ajustar el brillo de la pantalla en el momento de encenderla eso debería funcionar.

Pero eso no ajusta el brillo de la pantalla si cambian las condiciones de luz estando la pantalla encendida.

¿Es eso lo que querías hacer? :oh:

Mitrhandir
26/01/16, 18:46:47
Sí, y me acabo de dar cuenta.... Me tocará volver a los 3 perfiles. Pero ya me voy dando cuenta cómo funciona Tasker. Tú cómo lo harías?

WillyWeb
26/01/16, 19:00:10
Lo puedes hace con un sólo perfil, y te he dicho cómo lo haría yo en mi primera respuesta...

Si lo que pretendes es que el brillo se ajuste al cambiar las condiciones de luz deberías monitorizar los cambios de valor de la variable de Tasker %LIGHT. Eso es un evento, no un estado. Al disparar el perfil con un evento la tarea asociada (que sólo puede ser de entrada) se ejecutará cada vez que se produzca el evento (un cambio de luz en tu caso).

Cambia el evento de "Pantalla encendida" por el de "Establecer variable" y usa %LIGHT (en la lista sale como Nivel Luz). Y para evitar que el brillo cambie como loco (que podría suceder en determinados ambientes) yo añadiría una pausa de unos pocos segundos como A4.

Mitrhandir
26/01/16, 19:46:23
Ya está hecho. Lo de la pausa no lo he entendido. Podrías ser un poco más específico? Eres un crack! Estoy aprendiendo mucho y espero dejar de dar la murga pronto! :risitas:

josemaGL
26/01/16, 19:58:02
Lo de la pausa de tiempo se localiza en: Acción ->tarea->esperar.

WillyWeb
26/01/16, 20:00:06
Sin problema...

El evento de ajustar el valor de la variable %LIGHT se está produciendo de forma casi continua (si añades un beep muy corto a la tarea podrás escuchar a qué ritmo cambia la variable). Eso podría ocasionar saltos en los ajustes del brillo si el valor de %LIGHT oscila justo entre los valores que has definido para saltar entre A1/A2/A3. Una forma sencilla de evitar esos cambios rápidos es hacer que la tarea haga una pequeña pausa (2 o 3 segundos) antes de terminar. Tal y como funciona Tasker de forma predeterminada la tarea estará "bloqueda" mientras termina esa pausa y los cambios de %LIGHT que se produzcan no la podrán ejecutará.

Mitrhandir
26/01/16, 20:44:02
Perfil: LuxAdjust (53)
Priority: 50
Evento: Establecer variable [ Variable:%LIGHT Valor:* User Variables Only:Apagado ]
Entrada: LuxAdjust (42)
A1: Brillo de pantalla [ Nivel:0 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 0 & %LIGHT < 80 ]
A2: Esperar [ MS:0 Segundos:2 Minutos:0 Horas:0 Días:0 ]
A3: Brillo de pantalla [ Nivel:100 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 81 & %LIGHT < 474 ]
A4: Esperar [ MS:0 Segundos:2 Minutos:0 Horas:0 Días:0 ]
A5: Brillo de pantalla [ Nivel:255 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 475 ]

Dejo aquí el perfil para uso y disfrute de los foreros. Lo único que no me cuadra es lo de la pausa, porque sólo pausamos lo inevitable (el cambio), porque lo ideal sería un cambio gradual de luz. Vamos, que no cambiara de golpe. Gracias WillyWeb! :ok::gracias:

WillyWeb
26/01/16, 21:47:10
Te sobra una de las pausas, y la que dejes la pones al final. Y el motivo de ponerla es evitar que, en una circunstancia muy particular (que la luz oscile justo entre los valores que ocasionan un cambio de brillo), el brillo cambie cada medio segundo.

Me explico...

Si la luz oscila entre los valor 75 y 85 el brillo cambiaría de 0 a 100, y esa oscilación se producirá cada medio segundo si no lo remedias de alguna forma. La pausa es la forma más simple (y menos elegante) de remediarlo, aunque seguramente es la que menos batería consume.

Si quieres un cambio más gradual, y algo menos sensible a esas oscilaciones, prueba con esto...

-Supongamos que quieres establecer 10 saltos de brillo.
-Supongamos que los valores de %LIGHT van del 0 al 512 (creo que eso depende de tu sensor de luz).
-Sabemos que el brillo va de 0 a 255.

%luz = floor ( %LIGHT / 51.2 )
%brillo = %luz * 25.5

Usa %brillo en un acción "Brillo de pantalla" y tendrás un ajuste de diez niveles directamente proporcional a la luz ambiente.

Mitrhandir
27/01/16, 09:20:18
Después de tirarme media noche intentando hacer lo que propones, desisto. Sé que hay que establecer variables, pero no me sale. No hace falta que me lo des masticadito (porque si no, no aprendo), pero sí,que me dejes más miguitas de pan.
Saludos! :ok:

Caravantes
27/01/16, 12:43:21
Sé que hay que establecer variables, pero no me sale.

Willy te lo ha dado casi hecho, con los nombres de las variables y con las fórmulas. Solo hay que adaptarlo a la sintaxis de Tasker. Son dos acciones, espero que puedas entenderlas así:

Establecer variable %luz a floor (%LIGHT/51.2) , matemáticas activadas.

Establecer variable %brillo a %luz*25.5 , matemáticas activadas.

Eso son unas miguitas, pero si necesitas más pues lo dices.

Mitrhandir
27/01/16, 14:36:49
Perfil: LuxAdjust (53)
Priority: 50
Evento: Establecer variable [ Variable:%LIGHT Valor:* User Variables Only:Apagado ]
Entrada: LuxAdjust (42)
A1: Brillo de pantalla [ Nivel:0 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 0 & %LIGHT < 70 ]
A2: Brillo de pantalla [ Nivel:100 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 71 & %LIGHT < 474 ]
A3: Brillo de pantalla [ Nivel:255 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 475 ]
A4: Establecer variable [ Nombre:%luz A:floor (LIGHT / 51.2) Calcular:Encendido Añadir:Apagado ]
A5: Establecer variable [ Nombre:%brillo A:%luz*25.5 Calcular:Encendido Añadir:Apagado ]

Bueno, aquí lo dejo. Veo que me queda mucho camino por recorrer. Iré probando a ver cómo va!

:gracias:

Edito: me da error la primera acción. A ver si descubro el problema.

Perfil: LuxAdjust (53)
Priority: 50
Evento: Establecer variable [ Variable:%LIGHT Valor:* User Variables Only:Apagado ]
Entrada: LuxAdjust (42)
A1: Brillo de pantalla [ Nivel:0 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 0 & %LIGHT < 70 ]
A2: Brillo de pantalla [ Nivel:100 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 71 & %LIGHT < 474 ]
A3: Brillo de pantalla [ Nivel:255 Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido Efecto inmediato:Apagado ] Si (if) [ %LIGHT > 475 ]
A4: Establecer variable [ Nombre:%luz A:floor (LIGHT / 51.2) Calcular:Encendido Añadir:Apagado ]
A5: Establecer variable [ Nombre:%brillo A:%luz*25.5 Calcular:Encendido Añadir:Apagado ]

Caravantes
27/01/16, 15:19:51
Yo lo haría así:

Perfil: LuxAdjust
Contexto de estado, pantalla encendida (estado pantalla sí)
Contexto de hora, desde (desmarcar, medianoche) hasta (desmarcar, medianoche), repetir cada 2 minutos.
Entrada: LuxAdjust (42)
A1: Establecer variable %luz a floor (%LIGHT/51.2) , matemáticas activadas.
A2: Establecer variable %brillo a %luz*25.5 , matemáticas activadas.
A3: Brillo de pantalla [ Nivel:%brillo Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido

Eso es todo, y supongo que debería funcionar. Siempre que tengas la pantalla encendida, cada dos minutos te hará el juste de brillo según la luz ambiental.

En la configuración de la acción A3, para poner la variable %brillo debes (primero) hacer clic en el icono de las dos flechas que se entrecruzan (arriba a la derecha), y luego puedes escribir la variable o bien elegirla de la lista que se abre al tocar en el icono de la etiqueta (arriba).

Detalle: en el contexto de hora/tiempo es imposible poner una frecuencia mayor que 2 minutos (no es posible poner que se repita cada 1 minuto, ni cada x segundos).

Ya nos dirás si funciona.

Caravantes
27/01/16, 15:39:57
Otra opción mejor:

Perfil: LuxAdjust
Contexto de estado, pantalla encendida (estado pantalla sí)
Entrada: LuxAdjust (42)
A1: Establecer variable %luz a floor (%LIGHT/51.2) , matemáticas activadas.
A2: Establecer variable %brillo a %luz*25.5 , matemáticas activadas.
A3: Brillo de pantalla [ Nivel:%brillo Deshabilitar 'Safeguard':Encendido Ignorar nivel actual:Encendido
A4: Esperar 15 segundos.
A5: Ir a acción 1, si %SCREEN ~ on

Con este planteamiento nos aseguramos de que el brillo se ajuste en el momento de encender la pantalla. Luego (A4) la tarea espera 15 segundos y tras eso (A5) la tarea vuelve a comenzar desde la acción 1, siempre que la pantalla permanezca encendida. Con esto nos aseguramos de que el brillo se reajuste cada 15 segundos, y que la tarea finalice cuando la pantalla deje de estar encendida.
Porsupuesto, se puede cambiar el tiempo de 15 segundos a lo que se estime oportuno.

Repito: En la configuración de la acción A3, para poner la variable %brillo debes (primero) hacer clic en el icono de las dos flechas que se entrecruzan (arriba a la derecha), y luego puedes escribir la variable o bien elegirla de la lista que se abre al tocar en el icono de la etiqueta (arriba).

Mitrhandir
27/01/16, 16:44:31
Hola Caravantes! He hecho tu perfil, y, a falta de probar, pinta bien. Me está volviendo loco el tema de las variables. Ha llegado la hora de frenar en seco y repasar todo lo que he aprendido hasta ahora. Me parece complicadísimo. Vosotros sois informáticos no? :risitas:

Luego comento impresiones!

WillyWeb
27/01/16, 17:33:06
Por lo que veo Caravantes no te ha dado unas migas, te ha dado la barra de pan y algo para untar :risitas:

Mitrhandir
27/01/16, 18:45:03
Jajaja! Es cierto, pero tu perfil me gusta más WillyWeb. Estoy ajustando valores, pero pinta bien. Os agradezco todas las molestias que os habéis tomado conmigo! Iré aportando ideas!
:aplausos:

WillyWeb
27/01/16, 19:26:03
... Es cierto, pero tu perfil me gusta más WillyWeb ...

El perfil es tuyo, yo sólo te he dado pequeñas indicaciones, o migas si lo prefieres. :silbando:

Y te gusta más porque entiendes el funcionamiento, y tú necesitas entenderlo. Si %LIGHT vale tanto pongo el brillo a tanto. Si vale cuanto pongo el brillo a cuanto. Eso es fácil de ver. Lo de las fórmulas que te he propuesto después, y que tan detalladamente te ha explicado Caravantes, es infinitamente mejor, usa variables (tu tarea pendiente), cuidadoso con la batería, hace ajustes de brillo tan graduales y rápidos como quieras, y se puede implementar con un perfil y una tarea de tres acciones ... es oro puro colega :sisi1:

Caravantes
27/01/16, 21:28:53
Por lo que veo Caravantes no te ha dado unas migas, te ha dado la barra de pan y algo para untar

Ufff. :-)
Es que he visto a Albalats muy despistado. Cuando le dí las primeras miguitas, puso las acciones de ajuste de variables al final de la tarea, y eso es porque no entendió la propuesta. Yo también creo que es un plantemiento excelente, por eso quise facilitarle la labor, panetone incluído.

Para un principiante de Tasker probablemente hay una cierta dificultad en entender cómo funcionan las variables, pero también puede haber una dificultad matemática para entender ese tipo de ajuste. Algunas personas tenemos facilidad para ese tipo de algoritmo matemático, a otras les cuesta más, cada uno tiene sus virtudes y sus carencias específicas.

Albalats, hace mucho tiempo trabajé un lustro como informático. Pero en este foro hay compañeros de mucho nivel que nunca han tenido formación informática. Creo que lo que sirve de más ayuda es tener un tipo de pensamiento lógico, y también tener paciencia y ser cuidadoso con los detalles. Solo son opiniones. Como dice Willy, es importante que tú entiendas bien tus perfiles y tareas. Si te damos "hecho" un tinglado muy bueno pero no lo entiendes, nunca vas a poder modificarlo/mejorarlo/exprimirlo. Hay otros foros o páginas web donde la gente intercambia perfiles de Tasker y algunos lo hacen sin entender cómo están hechos o por qué funcionan esos perfiles. Aquí somos más de dar explicaciones y enseñar para que cada uno se construya su estructura y aprenda a manejarla.

WillyWeb
27/01/16, 22:03:05
Ufff. :-)
Es que he visto a Albalats muy despistado ... por eso quise facilitarle la labor, panetone incluído.

Estoy seguro de que el esfuerzo merecerá la pena. ;-)

Para un principiante de Tasker probablemente hay una cierta dificultad en entender cómo funcionan las variables, pero también puede haber una dificultad matemática para entender ese tipo de ajuste.

Cierto. Se me pasó por la cabeza aclarar el propósito de esas dos fórmulas, que reconozco que no son de asimilación inmediata, pero quería ser muy conciso y a la vista está que me he pasado. Intentaré remediarlo. :rolleyes:

Creo que lo que sirve de más ayuda es tener un tipo de pensamiento lógico, y también tener paciencia y ser cuidadoso con los detalles ... Como dice Willy, es importante que tú entiendas bien tus perfiles y tareas.

Yo no tengo formación informática. Soy autodidacta, curioso y metódico. Y mi curiosidad no me permite aceptar algo sin entender cómo funciona. En este mundillo eso es una gran virtud porque no es complicado extrapolar el conocimiento que adquieres al hacer una cosa a cualquier otra cosa que hagas después. Con ese sistema he aprendido a programar en más de media docena de lenguajes y puedo leer/entender otra media docena más.

Si te damos "hecho" un tinglado muy bueno pero no lo entiendes, nunca vas a poder modificarlo/mejorarlo/exprimirlo ... Aquí somos más de dar explicaciones y enseñar para que cada uno se construya su estructura y aprenda a manejarla.

Exacto. :ok:

WillyWeb
27/01/16, 22:54:20
%luz = floor ( %LIGHT / 51.2 )
%brillo = %luz * 25.5

Intentaré explicar qué hacen esas fórmulas que puse antes, pero antes una aclaración...

El sistema de ajuste de brillo que estás usando establece tres niveles de brillo condicionado por un determinado rango de valores de luz ambiente. Es sencillo y efectivo. Eso es indiscutible.

Si quisieras un sistema de ajuste de cinco niveles tendrías que añadir más acciones, reajustar los rangos de luz ambiente y reajustar los niveles de brillo para cada uno de ellos.

En definitiva, con el sistema que estás usando necesitas una acción para cada nuevo nivel de brillo que quieras añadir, además de reajustar todos los anteriores.

Mi propuesta evita todos esos reajustes calculando un nivel de brillo en función directa de la luz ambiente.

Al tema...

-Supongamos que quieres establecer 10 saltos de brillo.
-Supongamos que %LIGHT puede tener 512 valores (de 0 al 511).
-Sabemos que el brillo va de 0 a 255.

Como queremos diez niveles de ajuste (puedes poner los que quieras) dividimos el número de valores %LIGHT (que supongo que depende del tipo de sensor de luz de tu móvil) entre ese número de niveles. En este caso 512/10=51.2

La función de "floor" es eliminar los decimales del resultado de esa división. Y esa es la parte interesante. Observa...

Para los valores de %LIGHT de 0 a 51 el resultado de la división será 0.nnnn que al quitar los decimales se queda en 0.

Para los valores de %LIGHT de 52 a 102 el resultado de la división será 1.nnnn que al quitar los decimales se queda en 1.

Para los valores de %LIGHT de 461 a 511 el resultado de la división será 9.nnnn que al quitar los decimales se queda en 9.

Es decir, que con esa primera fórmula los valores de %LIGHT (0 a 511) se transforman en una escala de valores de 0 a 9 (los diez valores de nuestra escala de luz).

Si ahora dividimos el valor máximo que podemos dar al brillo (255) entre el valor máximo de nuestra escala de luz (9) tendremos a "cuanto" brillo equivale cada uno de los niveles de nuestra escala de luz. Así que 255/9=28.333 (el valor del salto de brillo).

Aclaro que el valor de 25.5 que puse al principio es incorrecto porque la división la hice entre 10.

Al multiplicar cada valor de nuestra escala de luz (0 a 9) por el valor del salto de brillo (28.333) obtendremos diez niveles de brillo de 0 a 255 en saltos de 28.333 (eso es un reparto equitativo de los niveles de brillo posibles).

Ese resultado final de brillo que hemos calculado se puede aplicar directamente en la correspondiente acción "Brillo de pantalla" (y sólo necesitamos una acción).

Lo he intentado ... ¿ahora está más claro? :oh:

Mitrhandir
27/01/16, 23:37:32
Yo estoy simplemente asombrado por esa capacidad de síntesis. He entrado en el grupo de Telegram y así de esta manera, trataré de no machacaros con tanta pregunta. Sé que lo hacéis de corazón, pero entiendo que puede ser muy cansino soportar a gente neófita en la materia. Tengo el concepto general, ya lo voy pillando, pero tengo la sensación de que me hace falta algo así como una "chuleta" de variables. Es decir, como un "diccionario" donde poder consultar.

Entre el grupo y el foro, estoy convencido de que aprenderé y sobre todo, comprenderé (porque Tasker va más de comprender).

Un saludo y buenas noches.

WillyWeb
28/01/16, 08:44:23
... Tengo el concepto general, ya lo voy pillando, pero tengo la sensación de que me hace falta algo así como una "chuleta" de variables. Es decir, como un "diccionario" donde poder consultar.

Eso que buscas se llama manual de usuario (ese gran desconocido). :silbando:

Tasker: Guía de Usuario
http://tasker.dinglisch.net/userguide/es/index.html

Tasker: Userguide
http://tasker.dinglisch.net/userguide/en/index.html

Tasker: Userguide 1P
http://tasker.dinglisch.net/userguide_summary.html

La versión en inglés está algo más actualizada que la española. Y la "1P" es todo en una página (ideal para hacer una búsqueda en todo el manual).

Y desde luego está el fabuloso tutorial de este foro...

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

Y que no te preocupe preguntar todo lo que necesites. Tus dudas (que seguramente las tiene más gente) y las posibles respuestas quedan aquí para el que las necesite y no tenga tan claro eso que decías...

Perdonadme, a lo mejor os parecen preguntas muy obvias, pero soy de los que piensan que si preguntas, eres tonto 5 minutos, pero si no preguntas, lo eres toda la vida.