PDA

Ver la Versión Completa : [ IDEA ] [Pseudo-Tutorial] Autómata de estados


maid450
07/02/14, 11:25:15
Hace tiempo leí un tema (https://groups.google.com/d/msg/tasker/eazMIGrqAVU/ebtBX8gc2IUJ) en el foro oficial (al que Andreas dedicó un articulo (http://www.pocketables.com/2012/11/user-creates-great-state-switching-system-in-tasker.html) en pocketables) hablando de un sistema que me pareció muy interesante para gestionar mejor los distintos estados por los que vamos pasando durante el día mediante Tasker.
Tenía desde entonces pendiente probarlo algún día, pero suponía cambiar casi toda la lógica interna en mis perfiles principales y nunca lo veía un buen momento, hasta que esta semana me he animado a hacerlo.
Aún lo estoy puliendo pero me parece muy prometedor y me lo estoy pasando en grande planeándolo y depurándolo :D así que quería compartirlo con vosotros a ver si alguien se anima a probarlo.

Ojo! Puede ser bastante laborioso (que no realmente dificil si lo planificas bien) montarlo todo y requiere cierta experiencia con la forma en que Tasker hace las cosas, así que si bien no hace falta ser ningún experto para hacerlo, los recién llegados al mundillo mejor abstenerse :risitas:.

Concepto
Si hay una serie de perfiles que pienso todos tenemos en nuestro Tasker son los del tipo "Casa", "Coche", "Trabajo" y similares, muy utiles y fáciles de implementar, pero a veces causan conflictos, por ejemplo: cuando paso por delante de mi casa con el coche, al llegarme la señal de mi wifi estoy en casa y en el coche a la vez :loco:.
Este sistema se basa en que solo puedes estar en uno de estos estados a la vez, y que las transiciones esntre estos se pueden preveer (en mi caso no puedo pasar de "casa" a "trabajo", tengo que pasar antes por "coche" o "fuera" si voy en bus) de modo que se puede diseñar un gráfico de estados e implementar un sistema que gestione las transiciones entre estos.

Implementación
Primero hay que analizar el caso de cada uno, los ditintos estados que queremos registrar y como pasamos de uno a otro. Yo lo hize mediante un gráfico (en informática se conoce este tipo de gráficos de estados como autómatas, de ahí el titulo), que creo que es la forma más facil de plantearlo y implementarlo después, esta es una versión inicial del mío (luego lo he ido complicando, pero así se ve bien el concepto y es más simple)

http://i.imgur.com/VDC4uXa.jpg


En el enlace del tema en el foro original de Tasker está la aproximación del creador de la idea que es bastante diferente, personalmente encuentro esta más efectiva y tolerante a fallos y prefiero que no hayan estados intermedios como "CERCA DE CASA", "RECIEN SALIDO DEL COCHE", etc... pero cada uno puede hacerlo como quiera.

Llega lo interesante, pasar esto a Tasker.
WARNING: Muy recomendable hacer un backup de como teneis Tasker antes de empezar a trastear, porque es posible que tengais que cambiar toda la logica interna de vuestros perfiles principales actuales, y si no os llega a funcionar o no os acaba de convencer estando a medias no será divertido volverlo a hacer todo.

Tendremos un perfil principal que se encargará de gestionar las transiciones entre perfiles, que será algo así:

Perfil: Switch State (129)
Priority: 9 Notification: no
Evento: Establecer variable [ Variable:%NEWSTATE Valor:* ] (En cuanto se modifique el valor de %NEWSTATE se lanza la tarea)
Entrada: SwitchState (123)
A1: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:Clear & Stop ] Si (if) [ %STATELOCK Ajuste ] (Si está definida %STATELOCK limpiamos y salimos sin hacer nada)
A2: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:Clear & Stop ] Si (if) [ %NEWSTATE ~ %STATE ] (Si intentamos cambiar al estado en que estamos ya actualmente limpiamos y salimos sin hacer nada)
A3: Establecer variable [ Nombre:%lstime A:%TIMES - %TSTART Calcular:Encendido Añadir:Apagado ] (Calculamos el tiempo que ha pasado desde que empezó el estado actual)
A4: Si (if) [ %NEWSTATE ~ %LASTSTATE ] (Si tratamos de volver al estado en que estábamos antes del actual)
A5: Ir a acción [ Tipo:Etiqueta Acción Número:1 Etiqueta:Clear & Stop ] Si (if) [ %lstime < 5 ] (y han pasado menos de 5 segundos desde el anterior cambio limpiamos y salimos, para prevenir rebotes entre 2 estados en ciertas condiciones)
A6: Fin si (End if)
A7: Establecer variable [ Nombre:%LASTSTATE A:%STATE Calcular:Apagado Añadir:Apagado ] (Guardamos el estado actual como anterior)
A8: Establecer variable [ Nombre:%STATE A:%NEWSTATE Calcular:Apagado Añadir:Apagado ] (Guardamos el nuevo estado como actual)
A9: AutoNotification [ Configuración: (muestro una notificación persistente con el estado actual, el anterior y el tiempo que había estado en el anterior)
Title: Estado actual: %STATE
Text: %STATE
Ticker: Se cambia a estado: %NEWSTATE
Status Bar Icon: action_about_dark
Id: switchstate
SubText: %LASTSTATE había durado %lstime segundos
Persistent: true
Text Expanded: Se ha pasado de %LASTSTATE a %NEWSTATE Paquete:com.joaomgcd.autonotification Nombre:AutoNotification Cuenta atrás (segundos):0 ]
A10: Establecer variable [ Nombre:%TSTART A:%TIMES Calcular:Apagado Añadir:Apagado ] (guardamos el momento en que pasamos al nuevo estado para calcular luego cuanto tiempo dura)
A11: Destino (de goto) Etiqueta:Clear & Stop (limpieza de variables tanto si hemos hecho el cambio como si no)
A12: Limpiar variable [ Nombre:%NEWSTATE Coincidencia de Patrón:Apagado ]
Variables globales usadas:


%STATE: Guarda el estado actual
%LASTSTATE: Guarda el estado anterior, además de para evitar transiciones incoherentes se puede usar para otras cosas utiles que explicaré luego
%NEWSTATE: variable que indica el estado al que queremos pasar, cuando cambiemos su valor se lanzará la tarea anterior, despues se limpia.
%STATELOCK: En algunas circunstancias puede interesarnos que un estado sea bloqueante y que hasta que no lo permitamos explicitamente no se pueda cambiar, mientras esta variable tenga cualquier valor no se podrá cambiar de estado, en cuanto se limpia la variable vuelve a ser posible. (luego pondré un ejemplo)
%TSTART: El momento en que empieza un estado


A partir de aquí hay que implementar los perfiles que se encargan de hacer las transiciones.

Nota: Esto no es un tutorial paso a paso, sino una guía de los aspectos generales para implementar la idea. Cada caso será diferente, y el mio propio no es realmente así, esto es una versión simplificada de mi auténtico sistema porque transcribirlo completo era demasiada faena, podía ser más lio todavía de seguir y realmente no se adaptaría a vuestro caso de todos modos, así que no valía la pena.

Dicho esto, vamos a la implementación.
No hay casos generales y depende mucho de lo que queráis hacer, pero si que hay pautas habituales:

Los contextos tendrán condiciones de activación tipo:
- %STATE ~ Estado Origen (o en caso de que a un estado se pueda llegar desde varios: %STATE ~ Estado1/Estado2/Estado3... para los perfiles "de ida y vuelta" como la mayoría de los míos también se tendrá que aceptar el estado al que vamos a cambiar para que las condiciones se sigan cumpliendo y no ejecute la tarea de salida inmediatamente, luego lo vemos con un ejemplo)
- Condiciones que activen el estado destino (BT Conectado, WIFI/Antena Cercana...)

La Tarea de entrada a realizar será:
- Establecer variable %NEWSTATE = Estado Destino
- Establecer %STATELOCK a lo que sea si procede
Tarea de salida:
- Si se ha bloqueado el cambio de perfiles la salida tendrá que limpiar %STATELOCK
- En perfiles "de ida y vuelta" se vuelve al estado del que se vino al entrar cuando deja de cumplirse

Ejemplo de parte de mi sistema:

Mi perfil de "Controlar estado TRABAJO"
Contexto:
- %STATE ~ FUERA/TRABAJO (como ponía antes, acepto tambien el valor "TRABAJO" para que una vez entre en este estado se siga cumpliendo la condición, si no, nada más entrar dejaría de cumplirse y ejecutaría inmediatamente la tarea de salida, poniendome de nuevo en estado "FUERA")
- Calendario tiene entrada "Trabajo"
- Antena Cercana - las que tengo por el trabajo
Tarea de entrada:
- Establecer %NEWSTATE a TRABAJO
Tarea de Salida
- Establecer %NEWSTATE a FUERA

Mi perfil de "Controlar estado COCHE"
Contexto
- %STATE ~ FUERA/COCHE (lo mismo)
- BT Conectado
Tarea de entrada:
- Establecer %NEWSTATE a COCHE
Tarea de Salida
- Establecer %NEWSTATE a FUERA

Mi perfil de "Estado FUERA"
Contexto:
- Variable %STATE ~ FUERA
Tarea:
- Lanza Bluetooth, deja 10 minutos y apaga si no se ha conectado

Y así es como interactuan entre ellos:
- Por la mañana cuando voy en el coche (%STATE ~ COCHE) y lo apago, el BT se desconecta, con lo que se pasa a estado FUERA, lo que lanza el perfil "Estado FUERA" que deja el bluetooth 10 minutos, por si estoy en la gasolinera y luego vuelvo al coche, pero no es el caso.
- Al estar en estado FUERA y con las antenas de mi lugar de trabajo cerca, en cuanto entre en el evento de calendario "Trabajo" se cumplirá el perfil y me pondrá en estado TRABAJO (si llego tarde por ejemplo, el evento de calendario estará y las antenas también, pero mi estado aún será COCHE, con lo que no se lanza hasta que apague el coche)
- En cuanto acabo de trabajar (el evento se acaba o me voy lejos del trabajo) mi estado vuelve a ser FUERA, lo que vuelve a lanzar el BT, que si se conecta en esos 10 minutos me devuelve al estado COCHE
- etc...

Básicamente así es como funciona, se puede ver que tengo varios tipos de perfiles:
- Perfiles de control de estado ("Controlar estado COCHE", "Controlar estado TRABAJO"...) Estos controlan la transición de estados, no hacen nada relativo a los estados en si
- Perfiles de estado ("Estado FUERA", "Estado TRABAJO"...) estos su condición es que la variable %STATE tenga el valor correspondiente al estado en cuestión y realizan las tareas propias del estado en que están (poner en silencio, quitar bloqueo, etc...)

ejemplo: "Estado TRABAJO"
Contexto:
Valor de Variable %STATE ~ TRABAJO
Tarea de entrada:
- Apagar Bluetooth (Sé que no va a reconectar, para qué dejarlo los 10 minutos...)
- Poner en silencio
- Etc...
Tarea de Salida
- Quitar Silencio

Un caso en que uso el %STATELOCK es el modo DORMIR, veamos porqué:
perfil "Controlar estado CASA"
Contexto:
- Variable %STATE ~ FUERA/CASA/DORMIR
- Antena Cercana
- WIFI Conectado
Tarea de entrada:
- Establecer %NEWSTATE a CASA
Tarea de salida:
- Establecer %NEWSTATE a FUERA

perfil "Controlar estado DORMIR":
Contexto:
- Variable %STATE ~ CASA/DORMIR
- Tiempo: Entre las 00:00 y las 06:30
Tarea de entrada:
- Establecer %NEWSTATE a DORMIR
- Establecer %STATELOCK a 1
Tarea de salida:
- Limpiar %STATELOCK
- Establecer %NEWSTATE a CASA

perfil "Estado DORMIR":
Contexto:
- Variable %STATE ~ DORMIR
Tarea de entrada:
- Apagar datos
- Apagar WIFI
Tarea de salida:
- Encender WIFI
- Encender datos
- rutinas mañaneras varias

Si no pusiera el bloqueo, tan pronto se pasa a estado DORMIR, se lanza "Estado dormir", que apaga la wifi. Al apagarse pierde la conexión, lo que desactiva el perfil "Controlar estado CASA" que me pondría por tanto en estado "FUERA".
Al activar el bloqueo, el perfil "Controlar estado CASA" se desactiva igualmente al desconectarse, pero no permite cambiar a estado FUERA y se queda en modo "DORMIR".
Cuando llega la mañana, se quita el bloqueo y se pasa a estado CASA

Ventajas aka ¿para qué complicarme la vida?
¿Para qué todo este embrollo si mis perfiles de toda la vida me van bien? Pues primero que nada porque me pareció interesante la idea y quería probarlo, pero además tiene algunas ventajas interesantes:


Cuando lo ves funcionando mola mucho ver las distintas interacciones trabajando como una máquina bien engrasada (friki? si, lo sé X-D)
Crea un sistema mucho más coherente sin colisiones ni cosas raras (cuando funciona, hasta entonces pasan cosas realmente raras :risitas:)
Es muy divertido (para los que nos gustan estas cosas, claro) ponerlo en marcha y depurarlo, y mola :D
Se pueden hacer cosas realmente complejas de otro modo, como comprobar antes de un cambio cual era el estado anterior pudiendo diferenciar por ejemplo cuando subimos al coche desde casa, el trabajo o el gym y actuar en consecuencia
He dicho que mola?



Pues eso es, un aplauso a los valientes que hayan llegado hasta aqui :aplausos:


Espero que hayais entendido la idea y que os parezca interesante, si tenéis dudas para eso está el foro ;-)
Si os atreveis a probarlo contad vuestras impresiones.

tito_chua
07/02/14, 12:58:39
Fascinante, tengo oxidados los conocimientos de informática, pero me has traído grandes recuerdos a la mente. Necesito probarlo. Voy a engrasar las neuronas. Por cierto, no se ve el gráfico de Estados, aunque la explicación es tan coherente que se deduce. Estás totalmente comprometido con tasker. Lleva cuidado o te ficharan. Mil gracias por compartir tu experiencia. Me autoproclamo fan (y de Caravantes y mlsir)!

darkopro
07/02/14, 14:41:53
Muy interesante, yo tengo un entramado de interacciones de los perfiles entre si, en algunos muy compleja, para evitar fallos entre ellos. Este método me hubiera evitado bastante trabajo y creo que voy a ir implementándolo poco a poco.

maid450
07/02/14, 14:56:14
Por cierto, no se ve el gráfico de Estados, aunque la explicación es tan coherente que se deduce.
Es raro, yo si lo veo desde varios PCs... he cambiado el alojamiento de la imágen, a ver si así se ve.

ruco1980
07/02/14, 15:49:03
Ahora sí que se ve el gráfico....

Impresionante trabajo...enhorabuena!!!
Creo que en cuanto tenga tiempo voy a intentar implementarlo, no sin antes estudiarlo bien porque hay cosas que no comprendo mucho....
En mi caso yo trabajo "en la calle" y no puedo establecer algo fijo, pero p.ej la casa de mi madre se podría asimilar al "trabajo", porque es una wifi distinta con unas antenas de telefonía distintas....la verdad es que tengo interés en intentar implementar este proceso, ya que normalmente me funcionan bien mis perfiles, pero a veces, con los intentos de conexión de bluetooth en el coche, las pérdidas de señal de antenas, tareas de entrada y salida ejecutándose, etc.....a veces es un poco caos y la cosa se complica.....creo que con este esquema se puede llegar a organizar todo mejor....

1 saludo y enhorabuena otra vez!!

danidetenerife
07/02/14, 23:35:59
...

Caravantes
08/02/14, 00:53:10
[Pseudo-Tutorial] Autómata de estados

Estoy fascinado por el planteamiento, interesantísimo. Maid, muchísimas gracias por traerlo y por tus excelentes explicaciones.

El gráfico se ve perfecto. Y también es interesante -lo recomiendo- echar un vistazo al gráfico del foro oficial, enlazado por Maid: https://groups.google.com/forum/#!msg/tasker/eazMIGrqAVU/ebtBX8gc2IUJ

Solo veo un par de cosas mejorables. La primera es el título del hilo. La maryoría de los taskeros no estamos en la jerga informática y el término "autómata" nos desorienta bastante; suena a robótica o similar. Si utilizamos un buscador para encontrar módos de organizar las distintas situaciones diarias y encontramos [Pseudo-Tutorial] Autómata de estados (http://www.htcmania.com/showthread.php?p=12428390) ... seguramente no haremos clic ahí. Bueno, es el menor de los problemas porque este tema -como bien has dicho- tampoco está al alcance de un taskero novato, y a los otros ya los reconduciremos desde el foro. Tampoco es que haya un título muy evidente para este tema.

La otra cosa que me parece mejorable es el nombre de las variables utilizadas. Creo que has cogido los mismos nombres que el hilo original que has enlazado, con palabras inglesas. Julio García Muñoz, con su PlugIn WhatsTasker nos ha enseñado que es una buena idea utilizar variables que tengan un prefijo común: %wt_message, %wt_senderid, %wt_type, etc. Este planteamiento es todavía más importante cuando se trata de variables globales: cuando consultamos la lista de variables globales, las del mismo asunto aparecen agrupadas y se las puede localilzar fácilmente. Por ello creo que sería preferible añadir a las variables un prefijo común. Por otro lado, las variables internas de Tasker tienen todas sus letras en mayúsculas, y me parece buena idea utilizar mezcla de mayúsculas y minúsculas para las variables globales de usuario; de ese modo se distinguen fácilmente las unas y las otras. Mi propuesta sería algo como lo siguiente:
- %AutomEstado (%STATE)
- %AutomAnteriorEstado (%LASTSTATE)
- %AutomNuevoEstado (%NEWSTATE)
- %AutomBloqueado (%STATELOCK)
- %AutomComienzo (%TSTART)

Vamos a tener que leer tu post varias veces para terminar de entender los detalles. Por otro lado, no estoy muy seguro de querer que todos mis perfiles de situación sean excuyentes. Ahora mismo tengo varios perfiles que se solapan. En algunos casos he evitado ese solapamiento añadiendo contextos de tipo PACIVE !~ *Vehiculo*, pero en otos casos permito el solapamiento, cosa que no ocurrirá si adopto este sistema de autómata.

Si lo he entendido bien, para cada situación (casa, coche, trabajo) hay que hacer dos perfiles:
A - Un primer perfil que sería similar al "perfil clasico" en cuanto a contextos (antena cercana, conectado a wifi, bluetooth, etc) pero cuyas acciones solo modifican variables generales como %NEWSTATE.
B - Un segundo perfil cuyo contexto sería la variable %STATE, pero que sería igual al perfil clásico en cuanto a tareas (acciones concretas que queremos ejecutar al entrar o salir de esa situación).
Y luego hay un perfil general de control (el Switch State que has exportado completo) para controlar cualquier cambio de situación, que es el que también enlaza los perfiles de tipo A con los de tipo B.

En mi caso yo trabajo "en la calle" y no puedo establecer algo fijo

Supongo que te podrías hacer un perfil de trabajo atendiendo a horarios y días, o bien por la programación del calendario, como ha explicado Maid.

darkopro
08/02/14, 14:02:40
Hay algo que no comprendo, la primera acción de tarea es:
- ir a acción número 1 si %ESTATELOCK está ajustado
¿Como vamos a ir a la primera acción si ya estamos en la primera acción?¿Que me he perdido? Gracias de antemano por las respuestas.

La verdad que es interesante el tema porque mis perfiles son extremadamente complicados para que no den errores entre PACTIVE, TRUN y variables internas; integrar un nuevo perfil puede ser una faena jejeje

Lukevalci
08/02/14, 14:24:53
Hay algo que no comprendo, la primera acción de tarea es:
- ir a acción número 1 si %ESTATELOCK está ajustado
¿Como vamos a ir a la primera acción si ya estamos en la primera acción?¿Que me he perdido? Gracias de antemano por las respuestas.

La verdad que es interesante el tema porque mis perfiles son extremadamente complicados para que no den errores entre PACTIVE, TRUN y variables internas; integrar un nuevo perfil puede ser una faena jejeje

Se refiere que va a ir a la acción 11, con la etiqueta "clear & stop ". No sé yo tampoco por qué aparece lo de acción 1, la verdad.

Jusss
08/02/14, 16:14:43
PACTIVE, TRUN y variables internas; integrar un nuevo perfil puede ser una faena jejeje

La variable global TRUN indica una tarea en función ?

Lukevalci
08/02/14, 21:12:59
La variable global TRUN indica una tarea en función ?

Sí. T (task =tarea) RUN (en ejecución)

ruco1980
12/02/14, 00:37:16
Estoy intentando hacerme mi gráfico de mis perfiles (casa, fuera, trabajo, gym, casa madre) para empezar a implementar ésto a ver qué tal pero hay cosas que no comprendo...
No es que me sea necesario implementar esto, pero sé que me voy a liar con esto y voy a estar un par de semanas enganchado trasteando...me habéis enganchado a tasker jajaj esto es una droga jejej...sé que la voy a liar y me va a dejar todo de funcionar jejej, pero bueno...luego reinstalo backup de tasker o de titanium jejej...

En el perfil gestor de estados, la etiqueta "Clear & Stop" es simplemente eso, o es algo que debemos establecer antes, o simplemente vale con escribir la etiqueta en su correspondiente apartado?..
Y luego, cuando dices %STATE coincide con FUERA/TRABAJO, entiendo que FUERA y TRABAJO es el nombre que le has dado a la variable %STATE en ese momento no? es decir, a ver si lo he entendido bien....
Si por ej, me voy de casa y se ejecuta la tarea de salida de mi perfil casa donde se me desconecta mi wifi y se me enciende el BT...entonces yo creo un perfil de contexto de estado, valor de variable %STATE coincide con FUERA/TRABAJO + contexto de estado, red, conectado a BT (el de mi coche); y ahí la tarea de entrada simplemente es Tarea de entrada:
- Establecer %NEWSTATE a COCHE
Tarea de Salida
- Establecer %NEWSTATE a FUERA
Y luego tendría otro perfil de estado conectado a BT donde ya pongo mi tarea de entrada con sus acciones de encender gps, abrir radardroid, desbloquear etc...y su tarea de salida
Entonces mi perfil de coche sólo se activará cuando la variable newstate se establezca a coche no?
No sé si me he explicado bien....igual se me queda un poco grande ésto para mis conocimientos, lo que pasa que cada vez me engancho más a tasker jejej pero me falta comprender muchas cosas....me ayudaría ver alguna transcripción de tus perfiles para enfocar los míos...
1 saludo y perdón si no se me entiende muy bien...

maid450
12/02/14, 07:31:29
Solo veo un par de cosas mejorables. La primera es el título del hilo. La maryoría de los taskeros no estamos en la jerga informática y el término "autómata" nos desorienta bastante; suena a robótica o similar. Si utilizamos un buscador para encontrar módos de organizar las distintas situaciones diarias y encontramos [Pseudo-Tutorial] Autómata de estados ... seguramente no haremos clic ahí. Bueno, es el menor de los problemas porque este tema -como bien has dicho- tampoco está al alcance de un taskero novato, y a los otros ya los reconduciremos desde el foro. Tampoco es que haya un título muy evidente para este tema.
Ya lo pensé, pero como dices no se me ocurrió nada evidente... A ver si se me ocurre algo y lo cambio

La otra cosa que me parece mejorable es el nombre de las variables utilizadas. Creo que has cogido los mismos nombres que el hilo original que has enlazado, con palabras inglesas. Julio García Muñoz, con su PlugIn WhatsTasker nos ha enseñado que es una buena idea utilizar variables que tengan un prefijo común: %wt_message, %wt_senderid, %wt_type, etc. Este planteamiento es todavía más importante cuando se trata de variables globales: cuando consultamos la lista de variables globales, las del mismo asunto aparecen agrupadas y se las puede localilzar fácilmente. Por ello creo que sería preferible añadir a las variables un prefijo común. Por otro lado, las variables internas de Tasker tienen todas sus letras en mayúsculas, y me parece buena idea utilizar mezcla de mayúsculas y minúsculas para las variables globales de usuario; de ese modo se distinguen fácilmente las unas y las otras. Mi propuesta sería algo como lo siguiente:
- %AutomEstado (%STATE)
- %AutomAnteriorEstado (%LASTSTATE)
- %AutomNuevoEstado (%NEWSTATE)
- %AutomBloqueado (%STATELOCK)
- %AutomComienzo (%TSTART)

Como digo solo es un pseudo-tutorial y cada uno puede adaptarlo a su gusto, por eso y porque la unica tarea que todos los que lo intenten hacer deberán tener prácticamente igual no es larga ni compleja no he puesto el xml.

En cuanto a que es buena idea poner prefijos comunes a las variables, lo es para los desarrolladores de plugins que tienen que asegurarse de que sus variables no van a coincidir bajo ningún concepto con alguna que use un usuario, y los prefijos son la mejor opción para esto, sin embargo, para el usuario final es totalmente optativo, y si bien me gusta tener mis variables más o menos organizadas según mis estandares, también me gusta que "suenen bien" y tengan nombres lógicos, y como voy a escribirlas a menudo, que no sean muy largas.
Por eso he elegido esos nombres, pero vamos, como he dicho cada uno es libre de poner los que quiera ;-)

En el perfil gestor de estados, la etiqueta "Clear & Stop" es simplemente eso, o es algo que debemos establecer antes, o simplemente vale con escribir la etiqueta en su correspondiente apartado?..
Es simplemente una acción de tipo etiqueta con ese nombre, lo hice así porque no me gusta repetir las cosas en varios sitios, y como la variable %NEWSTATE hay que limpiarla antes de acabar la tarea sea cual sea su resultado (se cambie de estado o no) así, en cada punto en el que hay que abortar la ejecución (el cambio de estados está bloqueado con %STATELOCK, se intenta cambiar de nuevo al estado que ya está activo, etc...) en vez de hacer un "Parar tarea" voy a esa etiqueta, con lo que ejecuta la limpieza y acaba.
Y si la tarea acaba sigue normalmente y cambia el estado tambien llega a esa etiqueta, hace la limpieza y acaba.

Y luego, cuando dices %STATE coincide con FUERA/TRABAJO, entiendo que FUERA y TRABAJO es el nombre que le has dado a la variable %STATE en ese momento no?
Si, FUERA y TRABAJO son 2 de los posibles valores de %STATE.
es decir, a ver si lo he entendido bien....
Si por ej, me voy de casa y se ejecuta la tarea de salida de mi perfil casa donde se me desconecta mi wifi y se me enciende el BT...entonces yo creo un perfil de contexto de estado, valor de variable %STATE coincide con FUERA/TRABAJO + contexto de estado, red, conectado a BT (el de mi coche); y ahí la tarea de entrada simplemente es Tarea de entrada:
- Establecer %NEWSTATE a COCHE
Tarea de Salida - Establecer %NEWSTATE a FUERA
Y luego tendría otro perfil de estado conectado a BT donde ya pongo mi tarea de entrada con sus acciones de encender gps, abrir radardroid, desbloquear etc...y su tarea de salida
Casi, el perfil con tu tarea de entrada con acciones de encender GPS, etc y su tarea de salida se debe activar con "%STATE coincide con COCHE" unicamente, de esa forma la tarea de entrada se ejecutará en cuanto entre en ese estado y la de salida en cuanto se cambie a otro diferente, sin importarle el resto de factores.
La tarea de cambio de estado a coche está bien salvo por un detalle, tal como lo has puesto (%STATE coincide con FUERA/TRABAJO + contexto de estado, red, conectado a BT) entrará bien y pondra %STATE a COCHE, pero entonces la condición %STATE coincide con FUERA/TRABAJO dejará de cumplirse y ejecutará la salida, por eso debes incluir también entre los posibles valores de %STATE el valor al que vas a pasar, para una vez se haga el cambio el perfil siga cumpliendose, con lo que quedaría así:
%STATE coincide con FUERA/TRABAJO/COCHE + contexto de estado, red, conectado a BT
Las tareas de entrada/salida son correctas

Espero haberte aclarado el tema un poco X-D

darkopro
12/02/14, 17:24:29
Maid, una cosa, en los perfiles de control de estado (menos en tu caso el del coche) no sería mejor poner la tarea de salida, del perfil que controla, con el cambio de la variable al final? Así nos aseguramos que se ha acabado la tarea de salida antes de efectuar la de entrada del siguiente estado y nos evitaríamos posibles conflictos entre tareas.

maid450
12/02/14, 17:48:40
Maid, una cosa, en los perfiles de control de estado (menos en tu caso el del coche) no sería mejor poner la tarea de salida, del perfil que controla, con el cambio de la variable al final?
Así nos aseguramos que se ha acabado la tarea de salida antes de efectuar la de entrada del siguiente estado y nos evitaríamos posibles conflictos entre tareas.
Se puede hacer, aunque dependerá de los casos de cada uno, en el mío no hay esos conflictos, con lo que prefiero dejarlos separados por claridad, y si en algún caso se diese un poco de conflicto siempre se puede añadir un tiempo de espera o cambiar la prioridad de los perfiles...

ruco1980
13/02/14, 00:46:40
Muchas gracias maid por responder....me ha aclarado bastante...a ver si me pongo a intentar implementarlo que tiene muy buena pinta...
1 saludo!

ruco1980
13/02/14, 16:58:46
Hola maid!! Pues me he puesto al meollo y más o menos voy encajando las cosas....gracias a tus explicaciones me he dado cuenta que hay que fijarse mucho en el gráfico para entender el proceso...quería preguntarte un par de dudas a ver si me las puedes resolver...
Estoy comprobando la transición de unos estados a otros y me funcionan muy bien..por. ej...si me encuentro en el estado "fuera" y paso al estado "coche" o al estado "trabajo" funciona bien; tal y como me explicaste, primero creo un perfil de "controlar estado" donde se establece la variable newstate al estado "al que vamos" y la tarea de salida al "estado al que volvemos", en este caso "fuera"; y ese perfil de "controlar estado" es de valor de variable state coincide con "a donde voy y de donde vengo para que no se desactive", es decir en este caso coincide con "coche/fuera" o "trabajo/fuera"....añadiendo en este perfil de controlar estado los contextos necesarios (antena cercana, BT conectado, wifi, etc...). Después creo el perfil de estado "coche" o "trabajo" simplemente con el contexto de valor de variable state coincide con "coche" o "trabajo" y ejecuto mis tareas de entrada y salida.
En este aspecto me funciona todo correctamente, y por ej. me he dado cuenta que cuando paso del estado "fuera" al estado "coche" se realiza la transición de estados y paso a tener activos los perfiles (en verde) de "controlar estado coche", "estado coche" y "controlar estado fuera". Espero hasta aquí haberme explicado más o menos bien, si no es así lo siento....
Ahora es donde viene mi duda...al establecer los perfiles de "controlar estado fuera" y "estado fuera"...que está digamos en el "centro" del diagrama o autómata de estados....en este caso llegar al estado fuera se puede llegar desde muy diversos sitios (en mi caso puedo llegar desde casa/casamadre/coche/gym y trabajo) y es en este caso donde no sé si estoy haciendo las cosas mal...en los otros caso se establece una relación de dos, al estado al que voy y del que vengo (p.ej valor de variable state coincide con coche/fuera). ¿al establecer el perfil "controlar estado fuera" debo poner el contexto de valor de variable state coincide con casa/casamadre/coche/gym/trabajo? y entonces viene mi otra duda...al poner la tarea de entrada pongo establecer variable newstate a fuera, que es el estado al que voy de uno de los que vengo...pero a la hora de poner la tarea de salida puede ser que pase desde fuera a casa o a trabajo o a coche etc...¿cómo debo de ponerlo? establecer variable newstate a ???si pongo todos separados por / me he dado cuenta que se queda activo (en verde) el perfil "controlar estado fuera", pero si p.ej he pasado al estado "casa" sólo está en verde el de "estado casa" y no el de "controlar estado casa" junto con "el de "controlar estado fuera" como sí me ocurre en los otros casos que he comentado anteriormente....
Madre mía menudo lío me he montado yo solo jajaj...espero haberme medio "explicado" pero ya de antemano te doy las gracias por esta estupenda posibilidad que nos has brindado....si no tienes excesivos perfiles que se solapen me parece una muy muy buena opción de control.....

Otra cosa que me ha llamado mucho la atención, aunque imagino que no lo comprendo por mi falta de conocimientos o no lo estoy entendiendo bien, es que, p.ej en mis otros perfiles, si introduzco una tarea de esperar 10 min con BT encendido y si no ha conectado apaga...hasta que no pasan esos 10 min los otros perfiles o tareas no se ejecutan, esa tarea de "esperar" me da la impresión que "paraliza" lo demás....
En cambio con este modelo (o al menos eso me parece a mí)...en el perfil "estado fuera" le pongo en la tarea de entrada encender BT y esperar 10 min y si por. ej paso al estado Gym en lugar de al de coche y se activa "controlar estado Gym" con su nueva variable newstate a Gym y entonces el perfil "estado gym" se activa se ejecuta su tarea de entrada y si le he puesto la acción de apagar BT porque sé que en el gym no se va a reconectar se ejecuta perfectamente sin necesidad de esa espera de 10 min sin poder actuar lo demás...esto es así o hay algo que se me escapa?
Bueno perdón por el rollo, pero todo esto me parece muy interesante y esto es una droga a la hora de probar cosas jejej lástima no tener más conocimientos....
1 saludo!

darkopro
13/02/14, 18:48:08
Yo por ejemplo el «estado FUERA» no está asociado a ningún perfil, en mi caso no es necesario en absoluto. FUERA simplemente es un estado de variable que indica que cualquier otro perfil se puede ejecutar.
El de «controlar estado casa» debería de quedarte activo igual que el de «casa» ya que «controlar estado casa» va asociado a una ubicación (o lo que sea) y a una variable (%Estado) que puede tener el valor FUERA o CASA y el perfil «casa» sólo tiene de condición el valor de la variable %Estado a CASA así que se cumplen ambas condiciones a la vez. Al no ser que te refieras a la notificación de autonotification que te dice el valor de la variable %Estado. Al no ser que en opciones de perfil desmarques la opción mostrar en barra de notificaciones.
Sobre problemas con tareas puedes utilizar la variable %TRUN (tarea en ejecución) yo por ejemplo en algunos perfiles uso:
Esperar hasta %TRUN !~ «nombre tarea» y espero a que finalice dicha tarea en ejecución para que siga la tarea actual. También puedes usar Tarea/detener para detener la tarea que está en ejecución y realizar la nueva.

ruco1980
14/02/14, 01:16:58
Gracias por responder darkopro...a eso me refiero con mi falta de conocimientos...cuando dices el "estado fuera" no está asociado a ningún perfil y que "fuera" es un estado de variable que indica que cualquier otro perfil se puede ejecutar...no sé muy bien como plasmarlo....así que me dedico al método ensayo-error jejej...de momento lo he puesto de la siguiente manera...no sé si estará bien pero ahora sí que me hace bien la transición entre perfiles....
El perfil "controlar estado fuera" lo he puesto como valor de variable State coincide con * (ese asterisco es lo que no sé si está bien)...con tarea de entrada establecer variable Newstate a Fuera y la de salida establecer variable newstate a *.
Después el perfil "estado fuera" ya es State coincide con "fuera" y sus tareas de entrada y salida.
Teniéndolo así ya realiza bien los cambios y se me quedan activos el de "controlar estado casa", "estado casa" y "controlar estado fuera"; lo que no sé si está bien planteado y tengo que seguir haciendo pruebas. El perfil "controlar estado casa" lo he dejado con variable state coincide con casa + conectado a mi wifi, y he eliminado antena cercana ya que en la zona que vivo no me funciona muy allá...Cuando voy a llegar a casa vengo de "fuera", y en las tareas le indico encender BT y wifi 10 min para que conecten y si no lo hacen se apagan...no me parece un gasto excesivo de batería 10 min encendidos...así cuando llego a casa conecta y mi wifi y cambia los estados...lo único es que llegue a casa sin coche, y ya no tenga el wifi encendido pero p.ej. en otros perfiles de salir a correr etc...le puedo poner que cuando cierre la aplicación endomondo, etc...se active el wifi, entonces llego a casa y el estado fuera cambia a casa bien....
Bueno pues ahí sigo haciendo pruebas....me falta saber si la manera en que lo he puesto está bien planteado porque no lo tengo muy claro....
1 saludo!

maid450
14/02/14, 08:46:25
Como dice darkopro, al menos en mi caso también el estado "FUERA" es como un estado "limbo" que indica que no estoy en ningún otro estado, por tanto no tengo asociada a el ninguna tarea de control, es en la tarea de salida del perfil de control del resto que tengo pasar a estado "FUERA".
Por eso en el "control estado casa", "control estado trabajo", "control estado coche", etc... cuando dejo de estar conectado a la wifi de casa o salgo del radio de las antenas cercanas en el estado de salida pongo %NEWSTATE a "FUERA" (tras un par de minutos por si ha sido una desconexión puntual)
Lo que si tengo es un perfil "estado fuera" que lanza el bluetooth un tiempo cuando paso a estado fuera por si entro en el coche, en mi caso cuando salgo de estado "FUERA" no hago nada, pero se puede hacer si en tu caso te interesa.

darkopro
14/02/14, 12:25:23
La verdad que lo del autómata es tan bueno que me voy a hacer otro controlando las aplicaciones, para cuando se queden en segundo plano siga el perfil activo

darkopro
14/02/14, 14:46:18
Bueno acabo de integrar el autómata de Estados a autómata de Apps. El automata de apps difiere del de estados en que debe dejar actuar a varias apps a la vez y su función es tener el perfil activo de una aplicación aunque esta esté en segundo plano para que no realice la tarea de salida y para poder usar la variable %PACTIVE aún teniendo la aplicación en segundo plano. Espero vuestras sugerencias para mejorarlo:


El perfil autómata:
Perfil: AUTÓMATA APPS (4)
Notification: no
Estado: Valor de variable [ Nombre:%AppNueva Operador:Está ajustado Valor:* ]
Entrada: Autómata Apps (12)
A1: Ir a acción [ Tipo:Número Acción Número:9 Etiqueta: ] Si (if) [ %AppBloqueo Ajuste ]
A2: Ir a acción [ Tipo:Número Acción Número:9 Etiqueta: ] Si (if) [ %AppNueva ~ *%AppEstado* ]
A3: Establecer variable [ Nombre:%AppInicio A:%TIMES - %TSTART Calcular:Encendido Añadir:Apagado ]
A4: Si (if) [ %AppNueva ~ *%AppÚltima* ]
A5: Ir a acción [ Tipo:Número Acción Número:9 Etiqueta: ] Si (if) [ %AppInicio < 3 ]
A6: Fin si (End if)
A7: Establecer variable [ Nombre:%AppÚltima A:%AppEstado Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%AppEstado A:%AppNueva Calcular:Apagado Añadir:Encendido ]
<limpiar y finalizar>
A9: Destino (de goto)
A10: Limpiar variable [ Nombre:%AppNueva Coincidencia de Patrón:Apagado ]


Como veis es prácticamente igual al autómata de estados sólo cambia el nombre de las variables y que la variable %Estado (AppEstado) en vez de ser sustituida cada vez que abrimos una aplicación se le añade el valor de la nueva aplicación para tener activos los perfiles de varias aplicaciones a la vez, tampoco tiene la notificación, que considero innecesaria en este caso. El Estado de bloqueo (%AppBloqueo) lo dejo por si le puedo dar utilidad en el futuro, de momento, no se lo encuentro dentro de mis perfiles.

En perfil de ENDOMONDO tendremos que poner la condición:
%AppEstado ~ *,ENDOMONDO/,*
(pongo una barra detrás / para que sea más fácil lectura la variable %AppEstado)

Ahora vamos con un perfil de control de aplicación, en este caso, Endomondo.
Perfil: Estado ENDOMONDO (57)
Aplicación: Endomondo
Entrada: Anon (90)
A1: Establecer variable [ Nombre:%AppNueva A:ENDOMONDO/ Calcular:Apagado Añadir:Apagado ]

Salida: Anon (112)
A1: Ejecutar consola [ Comando:cat /proc/$(pgrep com.endomondo.android.pro$)/oom_adj Cuenta atrás (segundos):0 Usar Root:Apagado Almacenar Salida En:%Endomondo Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ]
A3: Si (if) [ %Endomondo != 2 ]
A4: Buscar y Reemplazar Contenido de Variable [ Variable:%AppEstado Buscar:ENDOMONDO/ Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con: ]
A5: Fin si (End if)

En la tarea de salida ejecuto un comando para saber si Endomondo está en segundo plano, en caso contrario borro ENDOMONDO/ de la variable de «estado de aplicaciones»

Más información sobre cómo saber si las aplicaciones se están ejecutando en segundo plano en este hilo:
http://www.htcmania.com/showthread.php?p=8678272

Y el último perfil es el que limpia la variable %AppEstado al reiniciar el dispositivo:
Perfil: LIMPIAR APLICACIONES (122)
Evento: Reinicio del dispositivo
Entrada: Anon (125)
A1: Limpiar variable [ Nombre:%AppEstado Coincidencia de Patrón:Apagado ]

ruco1980
14/02/14, 16:10:28
Como dice darkopro, al menos en mi caso también el estado "FUERA" es como un estado "limbo" que indica que no estoy en ningún otro estado, por tanto no tengo asociada a el ninguna tarea de control, es en la tarea de salida del perfil de control del resto que tengo pasar a estado "FUERA".
Por eso en el "control estado casa", "control estado trabajo", "control estado coche", etc... cuando dejo de estar conectado a la wifi de casa o salgo del radio de las antenas cercanas en el estado de salida pongo %NEWSTATE a "FUERA" (tras un par de minutos por si ha sido una desconexión puntual)
Lo que si tengo es un perfil "estado fuera" que lanza el bluetooth un tiempo cuando paso a estado fuera por si entro en el coche, en mi caso cuando salgo de estado "FUERA" no hago nada, pero se puede hacer si en tu caso te interesa.

Gracias por responder...entonces te refieres a que el perfil "controlar estado fuera" NO lo tienes no? sólo el de "estado fuera" con su tarea de entrada de encender BT un tiempo y tarea de salida si te es necesaria no? Probaré a realizar pruebas así a ver qué tal....

Por cierto, por si os interesa, aunque seguro que en eso ya habéis caído vosotros que sois expertos jejejej en el perfil principal que gestiona los estados "switcherstate" he introducido, después de la acción 6 del Fin si (End if) una acción de Realizar Tarea, prioridad 10, y realizo la genial tarea del forero Caravantes MiscSegundosATiempo, dándole como parámetro 1 %lstime y parámetro 2 hh:mm:ss TEXT, devolver el valor de variable %salida.
Después en la acción de Autonotification en Subtext:%LASTSTATE ha durado %salida.
De este modo tenemos algo así como "Estado anterior CASA ha durado 08 horas 25 minutos 54 segundos...en lugar de 31589 segundos jejej. Bueno es una tontería pero queda bien jejj

1 saludo!

darkopro
20/02/14, 13:44:21
Por si interesa, he hecho una pequeña modificación para que cuando hace transición de estados, de COCHE a CASA (por poner un ejemplo) no quede registrado el estado FUERA. Para mí es más interesante que en la notificación me registre: COCHE a durado X tiempo - se ha pasado de COCHE a CASA, que que me registre: FUERA a durado X tiempo - se ha pasado de FUERA a CASA. Si el estado FUERA no es una simple transición (dura más de 5 segundos) si quedará registrado.

Autómata (83)
A1: Ir a acción [ Tipo:Número Acción Número:16 Etiqueta: ] Si (if) [ %EstadoBloqueo Ajuste ]
A2: Ir a acción [ Tipo:Número Acción Número:16 Etiqueta: ] Si (if) [ %EstadoNuevo ~ %Estado ]
A3: Establecer variable [ Nombre:%principio A:%TIMES-%Tstart Calcular:Encendido Añadir:Apagado ]
A4: Si (if) [ %principio < 5 ]
A5: Ir a acción [ Tipo:Número Acción Número:16 Etiqueta: ] Si (if) [ %EstadoÚltimo ~ %EstadoNuevo ]
A6: Establecer variable [ Nombre:%Nofuera A:1 Calcular:Apagado Añadir:Apagado ] Si (if) [ %EstadoNuevo ~ FUERA ]
A7: Fin si (End if)
A8: Establecer variable [ Nombre:%EstadoÚltimo A:%Estado Calcular:Apagado Añadir:Apagado ] Si (if) [ %Noestado != 1 ]
A9: Establecer variable [ Nombre:%Noestado A:1 Calcular:Apagado Añadir:Apagado ] Si (if) [ %Nofuera = 1 ]
A10: Establecer variable [ Nombre:%Estado A:%EstadoNuevo Calcular:Apagado Añadir:Apagado ]
A11: Esperar hasta [ MS:0 Segundos:0 Minutos:5 Horas:0 Días:0 ] Si (if) [ %TRUN !~ *,DESPERTAR,* ]
A12: Realizar tarea [ Nombre:HH:MM:SS Parar:Apagado Prioridad:8 Parámetro 1 (%par1):%principio Parámetro 2 (%par2): Devolver Valor de Variable:%salida ] Si (if) [ %Nofuera != 1 ]
A13: Realizar tarea [ Nombre:Decir h,m y s Parar:Apagado Prioridad:7 Parámetro 1 (%par1):%salida Parámetro 2 (%par2): Devolver Valor de Variable:%salida ] Si (if) [ %Nofuera != 1 ]
A14: AutoNotification [ Configuración:Title: %Estado
Text: %Estado
Ticker: Se cambia a: %EstadoNuevo
Status Bar Icon: action_about_dark
Id: Autómata
Priority: 2
SubText: %EstadoÚltimo ha durado %salida
Persistent: true
Text Expanded: Se ha pasado de %EstadoÚltimo a %EstadoNuevo Paquete:com.joaomgcd.autonotification Nombre:AutoNotification Cuenta atrás (segundos):0 Continuar Tarea Tras Error:Encendido ] Si (if) [ %Nofuera != 1 ]
A15: Establecer variable [ Nombre:%Tstart A:%TIMES Calcular:Apagado Añadir:Apagado ] Si (if) [ %Nofuera != 1 ]

A16: Destino (de goto)
A17: Limpiar variable [ Nombre:%EstadoNuevo Coincidencia de Patrón:Apagado ]
A18: Limpiar variable [ Nombre:%Noestado Coincidencia de Patrón:Apagado ] Si (if) [ %Nofuera != 1 ]
A19: Limpiar variable [ Nombre:%Nofuera Coincidencia de Patrón:Apagado ]



A11 es para que no me realice la tarea hasta que se realice la tarea que realiza tasker al despertarme. A12 es una tarea para pasar los segundos a horas, minutos y segundos basada en la tarea de caravantes que devuelve resultado en HH:MM:SS. A13 es una tarea que cambia el resultado de la tarea A11 a xh, xm y xs donde xh corresponde a horas, xm a minutos y xs a segundos.

Simplemente he cambiado la condición «Si (if)» por «tiempo >5» y establece una variable %nofuera que después controlará si se realizan el resto acciones o no. Luego he establecido la variable %noestado para controlar que FUERA no quede como último estado si sido una transición de estados corta.

PD: se puede observar que el nombre de las variables de la tarea original las he cambiado por otras, que me son más cómodas de controlar.

darkopro
20/02/14, 14:38:12
He editado la tarea anterior añadiendo otra variable %noestado para que funcione correctamente

ruco1980
20/02/14, 18:09:50
Muy buen planteamiento darkopro....a mi me está funcionando todo bien menos el estado coche que unas veces me da problemas y otros no...
En estado fuera sólo tengo una tarea de entrada que activa el wifi y el bluetooth por si se conectan...hay una acción de esperar 7 min y si no han conectado se apagan...
El caso es que en estado coche se conecta el BT y la variable BTCON se pone a 1...y yo en la tarea anterior tengo puesto establecer BT apagado si BTCON coincide con 0....y es curioso porque BTCON cambia a 1 (lo veo en la pestaña de variables) y a veces voy en el coche y según la notificación se apaga el BT a los 6 min y pico, alos 8 min y pico (después de haber pasado esos 7 min de espera) y sin embargo otras veces no se apaga....y no consigo localizar el problema....
Me podrías decir cómo tienes tú el estado fuera? yo lo tengo valor de variable coincide con Fuera y sólo tengo la tarea de entrada de encender wifi y BT esperar 7 min y apagarlos si no han conectado (esta tarea se realiza entera si salgo de casa a comprar o en la moto etc...)si voy al coche enseguida conecta...y en el resto de estados los tengo que cuando inician se apaga..(pej si activa coche ya se apaga wifi directamente porque sé que no va a conectar aunque hayan pasado sólo un par de min etc...)
1 saludo!

darkopro
21/02/14, 08:20:46
Yo es que no uso los variable BTCON, el perfil se activa al conectar al Bluetooth del coche (nombre: X dirección: XX:XX:XX:XX:XX:XX) y la tarea de desconexión la tengo que se pare si PACTIVE ~ COCHE. De todas maneras yo es que esa tarea no la tengo dentro del perfil COCHE, sino del perfil viaje que es cuando los perfiles COCHE y CARGANDO están activos, ya que cuando voy al trabajo no necesito las mismas cosas que cuando voy fuera, que enciendo el GPS, alertas de radares, etc

ruco1980
21/02/14, 11:07:37
Gracias darkopro...probaré con lo que dices....sería algo así como incluir una acción de detener tarea si PACTIVE coincide con coche después de esa espera de 7 min no? Así cuando no esté activo el perfil de coche entonces continuaría con la siguiente acción y apagaría el BT...probaré así a ver si consigo que no sufra desconexiones el BT cuando esté activo el perfil coche...

darkopro
21/02/14, 16:23:27
Gracias darkopro...probaré con lo que dices....sería algo así como incluir una acción de detener tarea si PACTIVE coincide con coche después de esa espera de 7 min no? Así cuando no esté activo el perfil de coche entonces continuaría con la siguiente acción y apagaría el BT...probaré así a ver si consigo que no sufra desconexiones el BT cuando esté activo el perfil coche...

Otra cosa que tengo es que cuando estoy en coche activo el estado de bloqueo para que no pase a otros perfiles mientras estoy en el coche

darkopro
21/03/14, 19:22:53
Perdón por el post, he conseguido solucionar el problema. 2 días con ello y es postear aquí y ocurrírseme el error. Por un problema, borre el valor la variable %Estadobloqueo y si lo haces manualmente tasker sigue entendiendo que está ajustada, entonces había manera de funcionara el autómata

Lukevalci
21/03/14, 22:49:50
Me interesa. Llevo tiempo que no me funciona el estado noche, no me entra en ese estado y continúa en casa. ¿que es eso e que si borras la variable manualmente tasker sigue entendiendo que esta ajustada? ¿Y si la limpias?

darkopro
22/03/14, 16:33:37
Mira la variable de bloqueo si está limpia o tiene algún valor, si tiene algún valor no te cambiará de estado

Lukevalci
23/03/14, 17:47:00
Gracias, darkopro, pero no tenía nada que ver con eso. La variable la limpia correctamente y cuando la consulto está "vacía" o "no ajustada".

Todo me funciona correctamente excepto cuando tiene que entrar en estado "noche". Este perfil está controlado por "Control estado noche" y como desencadenantes tiene la variable "Estado=Casa/Noche" y "horario de 1,30 a 8,44 h".

Además tengo el estado Casa, controlado por "Control Estado casa", con contextos de variable "Estado=Casa/Noche/Calle" y Conectado a wifi de mi casa.

Lo que entendía es que al llegar la 1,30 h lanzaría el perfil "Control estado Noche", y éste a su vez el perfil Noche, pero no es así, continúa en perfil Casa.

La variable "Estadobloqueado" está ajustada durante ese periodo, y luego se limpia.

Lo que creo que pasa es un problema de prioridad de tareas. Si repaso lo que entiendo que ocurre es lo siguiente:
1) Se encuentra activo Control Estado Casa/Casa
2) Llega la 1,30 h, entra el perfil Control Estado Noche pero a su vez se ejecuta la tarea de salida de Control Estado Casa.

He puesto una espera a la tarea de salida de Control Estado Casa de 3 segundos y además he subido la prioridad de la tarea de Control Estado Noche. A ver qué pasa...

darkopro
23/03/14, 18:20:34
Y porque un estado noche dentro del autómata de estados? Yo el autómata de estados lo uso exclusivamente para lugares, los contextos de noche (depende de si estoy en casa, de si es determinada hora, si la pantalla está apagada y de si está conectado al cargador) es totalmente independiente y nada tiene que ver con el autómata de estados yo sigo en CASA pero el móvil se queda en estado noche, de hecho el modo NOCHE bloquea estado CASA para que no haga tarea de salida del estado casa.
Deberías poner la copia del xml de CASA y NOCHE para ver si a alguien se le ocurre porque no funciona bien tu tarea ;)

Lukevalci
23/03/14, 18:56:05
No, verás. El estado Noche no está en el autómata de estados. Lo controla el Control Estado Noche, y éste sí cambia la variable "EstadoNuevo" a "Noche" y da valor 1 a la variable "Estadobloqueado"

Para el resto de perfiles (casa, noche, coche, papás y oficina) utilizo una única tarea (Ajustes de Red) que reacciona dependiendo del valor de "Estado". La adjunto por si hubiera alguna colisión extraña que no hubiera visto:

Ajustes De Red (33)
Abortar Tarea Existente
A1: Si (if) [ %ESTADO ~ CASA ]
A2: Secure Settings [ Configuración:Airplane Mode Disabled Paquete:com.intangibleobject.securesettings.plugin Nombre:Secure Settings Cuenta atrás (segundos):0 ]
A3: WiFi [ Establecer:Encendido ]
A4: Secure Settings [ Configuración:Mobile Data Disabled Paquete:com.intangibleobject.securesettings.plugin Nombre:Secure Settings Cuenta atrás (segundos):0 ]
A5: Red móvil [ Establecer:Apagado ]
A6: Bluetooth [ Establecer:Apagado ]
A7: Else Si (if) [ %ESTADO ~ PAPAS ]
A8: WiFi [ Establecer:Encendido ]
A9: Secure Settings [ Configuración:Mobile Data Disabled Paquete:com.intangibleobject.securesettings.plugin Nombre:Secure Settings Cuenta atrás (segundos):0 ]
A10: Red móvil [ Establecer:Apagado ]
A11: Bluetooth [ Establecer:Apagado ]
A12: Else Si (if) [ %ESTADO ~ OFICINA ]
A13: WiFi [ Establecer:Encendido ]
A14: Secure Settings [ Configuración:Mobile Data Disabled Paquete:com.intangibleobject.securesettings.plugin Nombre:Secure Settings Cuenta atrás (segundos):0 ]
A15: Red móvil [ Establecer:Apagado ]
A16: Bluetooth [ Establecer:Apagado ]
A17: Else Si (if) [ %ESTADO ~ COCHE ]
A18: Bluetooth [ Establecer:Encendido ]
A19: WiFi [ Establecer:Apagado ]
A20: Secure Settings [ Configuración:Mobile Data Enabled Paquete:com.intangibleobject.securesettings.plugin Nombre:Secure Settings Cuenta atrás (segundos):0 ]
A21: Red móvil [ Establecer:Encendido ]
A22: Else Si (if) [ %ESTADO ~ CALLE ]
A23: Bluetooth [ Establecer:Encendido ]
A24: WiFi [ Establecer:Encendido ]
A25: Secure Settings [ Configuración:Mobile Data Enabled Paquete:com.intangibleobject.securesettings.plugin Nombre:Secure Settings Cuenta atrás (segundos):0 ]
A26: Red móvil [ Establecer:Encendido ]
A27: Establecer variable [ Nombre:%contador A:0 Calcular:Apagado Añadir:Apagado ]
<Contador>
A28: Esperar [ MS:0 Segundos:0 Minutos:2 Horas:0 Días:0 ]
A29: Detener [ Con error:Apagado Tarea:Ajustes De Red ] Si (if) [ %PACTIVE ~ *Casa*/*Oficina*/*Papas*/*Coche* ]
A30: Sumar a variable [ Nombre:%contador Valor:1 Módulo (wrap around):0 ]
A31: Ir a acción [ Tipo:Etiqueta Acción Número:% Etiqueta:Contador ] Si (if) [ %contador < 5 ]
A32: Bluetooth [ Establecer:Apagado ] Si (if) [ %PACTIVE !~ *Coche* ]
A33: WiFi [ Establecer:Apagado ] Si (if) [ %PACTIVE !~ *Casa*/*Oficina*/*Papas* ]
A34: Else Si (if) [ %ESTADO ~ NOCHE ]
A35: Secure Settings [ Configuración:Airplane Mode Enabled Paquete:com.intangibleobject.securesettings.plugin Nombre:Secure Settings Cuenta atrás (segundos):0 ]
A36: Bluetooth [ Establecer:Apagado ]
A37: WiFi [ Establecer:Apagado ]
A38: Secure Settings [ Configuración:Mobile Data Disabled Paquete:com.intangibleobject.securesettings.plugin Nombre:Secure Settings Cuenta atrás (segundos):0 ]
A39: Red móvil [ Establecer:Apagado ]
A40: Fin si (End if)

Tengo otra tarea de "Ajustes de Audio" y otra de "Ajustes de Pantalla" con el mismo sistema

darkopro
26/03/14, 00:46:11
Deberías poner también la de controlador estado noche. De todas formas, si soy sincero la veo demasiado compleja, la tienes llena de condiciones que te van a exigir un mayor procesado cuando creo que sería muchísimo más rápido y limpio ejecutar las tareas dentro de cada estado (estado casa-tarea casa, estado papas-tarea papas... etc). Cada vez que pasas de estado ejecutas tres tareas llenas condiciones de las que sólo te sirve una, eso exige mucho proceso extra que te ahorrarías asignando una tarea a un estado. Además, conforme vayas adjuntando más «futuros estados» vas a acentuar este proceso extra en tu dispositivo y cada vez tarea será mucho más pesada

Lukevalci
26/03/14, 18:18:46
Difiero en tu planteamiento. La tarea no creo que exija un procesamiento extra. Las condiciones que no se cumplan simplemente se omiten y como si no existieran, ejecutándose únicamente la condición activa.

Durante un tiempo estuve con las tareas individuales como comentas, pero, como bien dice maid450 en el post de cabecera, sólo se puede estar en un estado cada vez, por lo que decidí transformarlo en una única tarea (idea de danko9696, no encuentro ahora el post que publicó).

Además si me surjen más estados sólo tengo que añadirlos a una única tarea (3 en este caso). Por otro lado si tengo/quiero modificar algún ajuste, sólo tengo que entrar en 3 tareas y modificar lo que quiera, no entrar en todas las tareas individuales y cambiarlo (con el peligro de dejarme alguna en el camino).

No sé, son planteamientos o soluciones al mismo problema. Me he acostumbrado así y me funciona perfecto.

Por cierto, sí era cuestión de prioridad de tareas. Ahora me funciona como un reloj :ok:

ruco1980
28/03/14, 17:31:29
Hola maid450!!

Podrías hacer el favor de pegar aquí la descripción de tu tarea "estado fuera" en la que enciendes el wifi y el BT durante 10 min y después de esa espera los pagas si no los has conectado?

Es que sufro desconexiones en el BT del coche, es el único estado que me falla y no consigo averiguar por qué?
He probado de todo en mi tarea de "estado fuera"...(Detener Si PACTIVE coincide con *,Controlar Estado Coche,*/*,Estado Coche,*....establecer variable BTCON a 1 y en la tarea poner BT apagado si BTCON coincide con 0, etc..etc...)
Me gustaría ver tu tarea para ver si hay algo que estoy poniendo mal...yo sospecho que es problema de los emparejamientos del BT de mi coche de sincronización automática...ya que la desconexión no se produce justo al acabar la espera de 7 min que tengo....se produce a los 6 min 40 seg, a los 9 min y pico...y hay veces que me funciona perfecto y no se desconecta hasta que cambio de estado....
Sospecho que lo que ocurre (y no sé si esto que voy a decir es una tontería) es que cuando el móvil y el coche se han emparejado automáticamente...al volver a hacerse todo funciona bien....pero si por lo que sea conecto otros auriculares BT de música para correr o lo que sea....es como si cuando vuelvo otro día al coche ese "emparejamiento" automático no se realiza bien y por eso sufro desconexiones...y creo que esto ya es problema de mi rom o tlf...pero la verdad es que no sé si es esto lo que me puede estar ocurriendo...
1 saludo!

darkopro
28/03/14, 18:07:18
Hola maid450!!

Podrías hacer el favor de pegar aquí la descripción de tu tarea "estado fuera" en la que enciendes el wifi y el BT durante 10 min y después de esa espera los pagas si no los has conectado?

Es que sufro desconexiones en el BT del coche, es el único estado que me falla y no consigo averiguar por qué?
He probado de todo en mi tarea de "estado fuera"...(Detener Si PACTIVE coincide con *,Controlar Estado Coche,*/*,Estado Coche,*....establecer variable BTCON a 1 y en la tarea poner BT apagado si BTCON coincide con 0, etc..etc...)
Me gustaría ver tu tarea para ver si hay algo que estoy poniendo mal...yo sospecho que es problema de los emparejamientos del BT de mi coche de sincronización automática...ya que la desconexión no se produce justo al acabar la espera de 7 min que tengo....se produce a los 6 min 40 seg, a los 9 min y pico...y hay veces que me funciona perfecto y no se desconecta hasta que cambio de estado....
Sospecho que lo que ocurre (y no sé si esto que voy a decir es una tontería) es que cuando el móvil y el coche se han emparejado automáticamente...al volver a hacerse todo funciona bien....pero si por lo que sea conecto otros auriculares BT de música para correr o lo que sea....es como si cuando vuelvo otro día al coche ese "emparejamiento" automático no se realiza bien y por eso sufro desconexiones...y creo que esto ya es problema de mi rom o tlf...pero la verdad es que no sé si es esto lo que me puede estar ocurriendo...
1 saludo!

Puede ser problema del soc, yo tengo desconexiones del BT cuando activo WIFI, por ejemplo

tito_chua
29/03/14, 09:47:17
Hola, ya se que no soy maid450 ;-) pero por si te vale, mi tarea de conexión al bt funciona perfectamente, en esencia es igual pero cambian los tiempos y ciclos. Te la pego...

Conexión Bt (8)
A1: Establecer variable [ Nombre:%contador A:0 Calcular:Apagado Añadir:Apagado ]
A2: For [ Variable:%contador Ítems:4 ] Si (if) [ %btCon No ajust. ]
A3: Bluetooth [ Establecer:Encendido ]
A4: Esperar [ MS:0 Segundos:10 Minutos:0 Horas:0 Días:0 ]
A5: Bluetooth [ Establecer:Apagado ] Si (if) [ %btCon No ajust. ]
A6: End For

P. D Estoy haciendo unas pruebas y me acabo de dar cuenta que te he pegado la versión de test, básicamente hacen lo mismo, solo que esta hace(hará) tres ciclos de la siguiente forma :
1._ enchufo bt
2._espero 10 seg de conexión
3._si no se ha conectado apago bt y espero unos minutos
4._si no se ha conectado reinicio el ciclo hasta las veces que lo tenga establecido. Si está conectado, finalizo


Perdonad, estoy muy espeso esta mañana.... Esta es la versión

Conexión Bt (8)
A1: For [ Variable:%contador Ítems:1,2,3,4 ] Si (if) [ %btCon No ajust. ]
A2: Bluetooth [ Establecer:Encendido ]
A3: Esperar [ MS:0 Segundos:10 Minutos:0 Horas:0 Días:0 ]
A4: Bluetooth [ Establecer:Apagado ] Si (if) [ %btCon No ajust. ]
A5: Esperar [ MS:0 Segundos:0 Minutos:5 Horas:0 Días:0 ] Si (if) [ %btCon No ajust. ]
A6: End For

ruco1980
29/03/14, 16:21:02
Hola, ya se que no soy maid450

No serás maid450 pero de momento ya tienes elaborado un bucle for de los que yo no comprendo muy bien jejej:ok:

Ahora en serio, muchas gracias por tomarte la molestia en transcribir tu perfil y tarea....que me servirá a mi y seguro que a otros muchos más....
Cuando no utilizaba el autómata de estados no sufría ninguna desconexión...tenía un perfil de estado conectado a BT BTconnect que establecía la variable BTCON a 1 y a 0 en la tarea de salida.
Después otro perfil de valor de variable BTCON a 1 que realizaba la tarea de entrada Modo coche on donde realizaba todas las acciones y su correspondiente tarea de salida. En esa situación no sufría nunca desconexiones del BT, por eso ahora usando el autómata de estados no consigo llegar a averiguar lo que me está pasando...si me ocurrieran las desconexiones por problemas del SOC (el mío es mediatek 6589T) como dice darkopro me habría ocurrido también en las anteriores ocasiones..
El resto de estados (casamadre, casa, trabajo, gym) son contextos de entrada en calendario o conectado a wifi y no me dan ningún problema...
No quiero pegar la descripción de las tareas todavía porque sigo cabezón ahí a ver si lo consigo...
Pongo un ejemplo: Tengo activo "Controlar Estado Trabajo"(Valor de variable %STATE coincide Trabajo/Fuera+Entrada en calendario) y "Estado Trabajo"(Valor de variable %STATE coincide Trabajo)....Cuando se cumple el horario ya no se cumple el contexto de entrada en calendario y ejecuta la tarea de salida del Estado Trabajo y la variable %STATE pasa a tener el valor de "Fuera"...entonces se activa el "Estado Fuera" y ejecuta la tarea de entrada (en este estado no hay tarea de salida) que enciende el wifi y el BT para ver si conectan y tiene una espera de 7 min y después los apaga si no han conectado. En ese periodo de tiempo cojo el coche al salir del trabajo y en el momento que arranco el coche se cumplen los contestos Valor de variable %STATE coincide con Fuera/Coche+BT conectado a SEAT entonces se activan los perfiles "Controlar Estado Coche" y "Estado Coche" y se ejecuta la tarea de entrada del estado coche (subir brillo,desbloquear pantalla y activar Guasapsinmanos). Hasta ahí todo bien...pues luego pasado un tiempo (6 min, 9 min...no tiene nada que ver con mi espera de 7 min) se desconecta el BT del coche y vuelve a pasar al "Estado Fuera" y ejecutar la tarea que he descrito antes de encender wifi y BT...

Espero haber expuesto más o menos bien el problema...A alguien se le ocurre qué es lo que puede ocurrir?

Gracias a todos!

tito_chua
29/03/14, 23:57:54
Para acotar la búsqueda. ¿Bloqueas el estado coche?

tito_chua
30/03/14, 00:17:32
Descarto que el error sea de hardware, pero en cualquier caso es fácil de comprobar... Desactiva tasker (pulsando sobre la rueda dentada en la pantalla principal), conéctate al coche y espera que se desconecte. Si lo hace, no es tasker....

Me inclino a pensar que el fallo está en el control de estados... Para ello usaría la variable que tiene el autómata para bloquear el estado a pesar del intento de cambio... Y haría la prueba de conexión... Si el autómata esta bien implementado, no cambiará de estado. De lo que quedaría comprobar que la tarea de reconexión bt está bien aparejada a los estados o los ifs están bien definidos. En este punto, también miraría las variables globales.

Para acompañar esto, activaría el log...

Y si no has dado con la clave, pues seguiremos buscando....

Marc0ADH90
21/05/14, 00:38:22
Editado.

mlesir
30/05/14, 12:57:24
Maid te he dejado un privado pero a lo mejor no te has dado cuenta.
Un saludo.

kenernest
08/01/15, 00:18:40
Bueno aquí un novato que va a hacer dos preguntas:

- En la pagina 2 lo preguntó Ruco1980 pero yo no lo he entendido: que es la etiqueta Clear & Stop?, cuando se definió?.

- Esta es de traca pero es que a mi ni me sale en las opciones, que es destino ( de goto)? Entiendo que con la actualización le han cambiado el nombre. Podéis decirme cual es?

Gracias!!!

ruco1980
08/01/15, 09:17:32
[quote=kenernest;16881852]- En la pagina 2 lo preguntó Ruco1980 pero yo no lo he entendido: que es la etiqueta Clear & Stop?, cuando se definió?.

- Esta es de traca pero es que a mi ni me sale en las opciones, que es destino ( de goto)? Entiendo que con la actualización le han cambiado el nombre. Podéis decirme cual es?[/quo

La etiqueta clear&stop es una acción que hace la limpieza de una variable, es decir una acción para que la tarea vaya a ese punto, limpie la variable y continúe...te pongo la contestación de maid450 que lo explica mucho mejor:

"Es simplemente una acción de tipo etiqueta con ese nombre, lo hice así porque no me gusta repetir las cosas en varios sitios, y como la variable %NEWSTATE hay que limpiarla antes de acabar la tarea sea cual sea su resultado (se cambie de estado o no) así, en cada punto en el que hay que abortar la ejecución (el cambio de estados está bloqueado con %STATELOCK, se intenta cambiar de nuevo al estado que ya está activo, etc...) en vez de hacer un "Parar tarea" voy a esa etiqueta, con lo que ejecuta la limpieza y acaba.[I]
Y si la tarea acaba sigue normalmente y cambia el estado tambien llega a esa etiqueta, hace la limpieza y acaba."

Con respecto a destino (de goto) tienes razón, acabo de ver que lo han cambiado de nombre, se encuentra en Tarea , Anchor....ahora se llama Anchor.... que me corrija algún experto porque yo no me explico o me entero muy bien, pero es una acción que en principio no hace nada, sirve para introducir un texto de explicación en un punto determinado de una tarea (al igual que puedes escribir cosas en el apartado de "etiqueta" de las acciones para que te sirvan de "guia o recordatorio"), pero esto ya te digo que no estoy muy seguro.

Espero haberte aclarado un poco, yo tampoco me entero mucho jejej, pero a ver si nos vamos poniendo las pilas que los pobres caravantes y mlesir son a los que les toca contestarnos a todos jejej

Un saludo.

Caravantes
08/01/15, 12:39:43
que es la etiqueta Clear & Stop?

Dentro de una tarea puedes establecer una o varias etiquetas para que la ejecución salte a ese punto y no se limite a una ejecución secuencial. Las etiquetas pueden añadirse a cualquier acción, del modo siguiente: en la configuración de la acción, al final puedes marcar la casilla "Etiqueta" y aparece un recuadro para escribir un texto, como por ejemplo "Clear & Stop"; ese texto es la referencia y en cualquier otra parte de la tarea puedes poner una acción del tipo "Ir a Clear & Stop": De ese modo, la tarea continuará ejecutando la acción que contiene esa etiqueta, y luego la siguiente acción.

Por otro lado, también puedes poner una "etiqueta" suelta, sin que vaya asociada a una acción, y para eso hay una acción específica (que no debería llamarse "acción" porque no "hace" nada); esta acción antes se llamaba "Destino de goto" y -como ha explicado Ruco- con la nueva versión de Tasker se llama ANCHOR (palabra inglesa cuya traducción habitual es "ancla" aunque en este contexto sería más adecuado traducirlo como "hito" o "punto de referencia"). Esta acción está en el grupo "Tarea".

kenernest
17/01/15, 11:05:47
Alguien podría explicarme la manera más correcta de integrar aquí la tarea encendido inteligente de WiFi que esta aquí
http://www.htcmania.com/showthread.php?p=1684309

Muchas gracias

GraphicAdventure
25/01/15, 02:55:33
Este tema de Maid tiene casi 1 año pero solo ahora paré detenidamente a mirarlo.
Si lo interpreté bien, este sistema de gestión de estados tiene como objetivo evitar colisiones entre perfiles y que funcionen de una forma organizada bajo las mismas condiciones.
El diagrama especifica que todos los estados tienen que pasar por el estado fuera, pero hay unas cuantas cosas que no me quedan claras.

1. El perfil fuera solo tiene la acción lanzar bluetooth, pero supongo que ¿tienes que adicionar la acción encender wifi para conectarse a casa no?
¿O dejas el wifi siempre encendido?

2. Por qué no tienes disociados los contextos antena cercana y wifi conectado del perfil casa?
Siempre que estés fuera intentará conectar al bluetooth, pero si estás fuera sin tu coche estará todo el día intentando conectarse, lo mismo pasaría con wifi.
Puedes ir de paseo a pie o en otro coche.
Si los disocias, solo enciendes el wifi si estás cerca de casa y solo enciendes el bluetooth si estás cerca de casa o cogiste el coche.

maid450
25/01/15, 12:54:30
Este tema de Maid tiene casi 1 año pero solo ahora paré detenidamente a mirarlo.
Si lo interpreté bien, este sistema de gestión de estados tiene como objetivo evitar colisiones entre perfiles y que funcionen de una forma organizada bajo las mismas condiciones.
El diagrama especifica que todos los estados tienen que pasar por el estado fuera, pero hay unas cuantas cosas que no me quedan claras.

1. El perfil fuera solo tiene la acción lanzar bluetooth, pero supongo que ¿tienes que adicionar la acción encender wifi para conectarse a casa no?
¿O dejas el wifi siempre encendido?

2. Por qué no tienes disociados los contextos antena cercana y wifi conectado del perfil casa?
Siempre que estés fuera intentará conectar al bluetooth, pero si estás fuera sin tu coche estará todo el día intentando conectarse, lo mismo pasaría con wifi.
Puedes ir de paseo a pie o en otro coche.
Si los disocias, solo enciendes el wifi si estás cerca de casa y solo enciendes el bluetooth si estás cerca de casa o cogiste el coche.
Hola, en efecto el tema de encender la wifi lo gestiono en otro set de perfiles, el diagrama que publiqué era con idea de mostrar una situación genérica, no un reflejo exacto de mi configuración.
Por un lado, tengo un perfil con contexto "antena cercana" por cada sitio donde voy de vez en cuando con wifi (mi casa, casa de mis padres, casa de algunos amigos...) esos perfiles hacen todos lo mismo: encender la wifi, y en salida la apagan.
Luego tengo un perfil con contexto "wifi conectado"que de encarga de modificar el estado, cuando se dispara hace:

if WIFII ~ *SSIDDECASA*
%NEWSTATE = HOME
else if WIFII ~ *SSIDDEMISPADRES*
%NEWSTATE = CHALET
...
else
%NEWSTATE = WIFI

Las ventajas de hacerlo así son que tengo un estado específico para algunas redes que pueden disparar su propio perfil específico para hacer más cosas y otro genérico para sitios donde sólo quiero que se encienda y apague la wifi sola, y cuando voy de viaje y me alojó en un sitio con wifi sólo tengo que crear un perfil con las antenas cercanas que encienda y apague la wifi y ya se gestiona el estado de apagar datos por la noche y demás cosas automáticamente.

Por otro lado, para el bluetooth uso un contexto de "si %STATE = OUTSIDE y Bluetooth cercano coche -> %NEWSTATE = CAR".
Así mientras el estado no sea OUTSIDE hará nada, cuando lo sea irá encendiendo y apagando el bluetooth hasta que se conecte al coche, y entonces cambiará el estado.

Espero haberte aclarado un poco las dudas

GraphicAdventure
25/01/15, 14:01:46
Vale, es representativo pero no lo utilizas así.
Lo que no me gusta de este sistema es que para cada estado se necesitan 2 perfiles, como tenga 10 estados serán 20 perfiles.

Tienes un perfil distinto para cada antena cercana de los wifis.
Estoy pensando si se puede incluir todas las células de las antenas de algunos wifis en un solo perfil.
El perfil antena cercana apenas encendería el wifi y el perfil wifi conectado lo apagaría al salir.
No probé hacer esto nunca, así que no sé si daría problemas, pero debería funcionar.
La única ventaja sería reducir el número de perfiles.

El bluetooth se enciende cuando el estado sea outside y bluetooth cercano.
Supongo que dejas el coche aparcado cerca de casa y que está dentro del área de antena cercana.
Mi idea es solo encender el bluetooth si el perfil antena cercana casa está activo o si cogiste el coche, para que cuando salgas de las antenas de casa con el coche siga encendiendo el bluetooth cada vez que el estado sea fuera.
En la situación que sales de tu zona de residencia sin coger el coche y vas a estar en la calle todo el día:
Si sales del área de antena cercana de casa sin coger el coche, pasará a estado fuera e intentará conectarse al bluetooth todo el día.

Caravantes
25/01/15, 23:11:54
Estoy pensando si se puede incluir todas las células de las antenas de algunos wifis en un solo perfil.

Te cuento cómo lo veo yo: Creo que eso se puede hacer sin problemas, ya sea bajo el planteamiento de Maid-Autómata o bien bajo otro planteamiento que utilice perfiles tradicionales. Si normalmente (en la situación de calle) tienes el Wifi apagado y quieres que se encienda automáticamente... necesitas igualmente varios perfiles de ubicación (antena cercana o similar), uno para cada zona en la que haya una red Wifi de las que utilizas, para encender la wifi al entrar en esas zonas.

Ahora bien, para simplificar, luego puedes apañarte con un solo perfil y tarea de tipo Wifi-conectado. En la tarea de ese perfil puedes poner distintos bloques de acciones IF/Endif que utilicen como condición algo como %WIFII ~ *RedConcreta*, y de ese modo una tarea común puede integrar "rutinas" específicas para cada red wifi a la que te conectas. Además de esas rutinas específicas es probable que al principio y al final quieras poner otras acciones que se ejecutarán siempre, sea cual sea la red Wifi a la que hayas conectado.

GraphicAdventure
26/01/15, 01:54:16
Si normalmente (en la situación de calle) tienes el Wifi apagado y quieres que se encienda automáticamente... necesitas igualmente varios perfiles de ubicación

La idea es crear un solo perfil de antena cercana, y como comentas también podría ser solo un perfil de wifi conectado.
Esto lo podría aplicar a wifis públicas o cualquier otro criterio.


Mis perfiles funcionan sin este sistema, nunca me dieron un conflicto.
De todas formas, por curiosidad estuve pensando como aplicar este sistema de una forma más sencilla.
Desde que Pent implementó las condiciones múltiples para contextos se puede simplificar el sistema, con un solo perfil y una sola variable.
Parece un poco inverosímil pero creo que funcionará.

Contexto:
- Estado de variable: %Profile ~ nombre_de_este_perfil O %Profile ~ No ajustada
- Otros contextos

Tarea de entrada:
A1: Establecer variable: %Profile A nombre_de_este_perfil

Tarea de salida:
Ax: Limpiar variable: %Profile


Si %Profile no está ajustada sería el estado fuera, si está ajustada nunca se podría conectar otro estado.
Así se pueden crear perfiles que sean excluyentes del sistema.
Mañana voy intentar aplicarlo a mis perfiles ya que es de fácil aplicación.
A ver como lo veis.

kenernest
26/01/15, 16:43:30
Buenas, la tarea principal transcrita por maid, que denomina switchstate, esta bien?? A mi es que no me arrancan los perfiles y lo tengo exactamente igual

GraphicAdventure
27/01/15, 00:48:38
No te puedo asegurar que esté bien, Maid o alguien que haya probado ese perfil te lo podría confirmar, pero yo apostaría que está bien.
Es posible que te hayas equivocado en algún carácter o alguna configuración (ej: calcular encendido) ya que son muchos datos.
Si el switchstate está bien, solo puede ser algo de los demás perfiles.

GraphicAdventure
27/01/15, 01:35:49
Estuve probando el sistema de control de perfiles que mencioné arriba.
Es muy interesante la sencillez de aplicarlo y la facilidad de manejar una sola variable con una flexibilidad muy buena para las condiciones.
Un detalle es que no tengo perfil fuera, si la variable %Profile no está ajustada, no hay ningún perfil activo, lo que significa que estoy en la calle.
Lo que sí introduje fue un perfil de coche fuera que no cambia de estado aunque esté activo (%Profile sigue sin estar ajustada) y solo se activa si cogí el coche cuando salí de casa. Así evito encender el bluetooth sin necesidad.

Maid, si prefieres que esto lo comente en un tema a parte dilo, lo puse aquí porque está relacionado.

maid450
27/01/15, 10:35:54
Estuve probando el sistema de control de perfiles que mencioné arriba.
Es muy interesante la sencillez de aplicarlo y la facilidad de manejar una sola variable con una flexibilidad muy buena para las condiciones.
Un detalle es que no tengo perfil fuera, si la variable %Profile no está ajustada, no hay ningún perfil activo, lo que significa que estoy en la calle.
Lo que sí introduje fue un perfil de coche fuera que no cambia de estado aunque esté activo (%Profile sigue sin estar ajustada) y solo se activa si cogí el coche cuando salí de casa. Así evito encender el bluetooth sin necesidad.

Maid, si prefieres que esto lo comente en un tema a parte dilo, lo puse aquí porque está relacionado.

No hay problema ;-), en efecto está relacionado ya que es una forma alternativa de hacer lo mismo, que además me parece muy interesante.
De hecho si cuando lo tengas todo definido haces un post explicando los detalles de implementación lo puedo linkar como método alternativo en el primer post para que se vea mejor.

Es cierto que mi metodo se puede hacer también con menos perfiles, pero lo hago así por claridad y organización, ya que realmente no hay ninguna penalización importante por usar más perfiles, ni en impacto de batería ni en rendimiento (si tienes 1000 perfiles tal vez si, pero entre tener 15 o 30 es totalmente insignificante) igual que como comentas podría tener todas las antenas de los perfiles "antena cercana" en uno y debería funcionar, pero por experiencia, cada cierto tiempo (cada 2 años o así) me gusta rehacer la lista de antenas cercanas de mis distintas ubicaciones, ya que he notado que con el tiempo la lista de antenas va cambiando (supongo que porque las compañias añaden nuevas antenas con el tiempo y por averías reemplazan algunas) y si lo tienes todo junto es más engorroso.

Sobre el tema del bluetooth, yo antes tambien lo hacia así, tenia una tarea (la describo por el foro en algun lugar que no recuerdo) que durante unos minutos encendía y apagaba el bt alternativamente hasta que acababa el tiempo o se conectaba, y esta tarea la lanzaba al salir de casa, del trabajo o de casa de mis padres, que es cuando suelo coger el coche.
Pero cuando implementaron en una version de Tasker el contexto "bluetooth cercano" decidí cambiarlo para probarlo y me he dado cuenta de que no consume apenas batería aunque se vaya encendiendo y apagando todo el rato cuando estoy fuera de casa (mi nexus 5 implementa BLE (http://en.wikipedia.org/wiki/Bluetooth_low_energy), que es una version nueva de BT que consume mucho menos que antiguamente) y resuelve el problema que tenía cuando salia de casa con el coche a cenar o cualquier cosa, que al volver de nuevo al coche era imposible que Tasker lo supiera para reconectarse, ahora si lo hace.

Desde que publiqué esto ha llovido mucho y he pulido/cambiado/añadido algunas cosas, así que voy a compartir la descripción de como lo tengo ahora (he eliminado algunos perfiles redundantes como algunos de los sitios donde activo el wifi y por privacidad los ids de las antenas cercanas y los nombres de redes wifi a las que me conecto, por lo demás está todo).
Es bastante extenso, pero por si a alguien le interesa.


Profile: SwitchState (29)
Event: Variable Set [ Variable:%NEWSTATE Value:* ]
Enter: SwitchState (27)
A1: Variable Set [ Name:%NEWSTATE To:%par1 Do Maths:Off Append:Off ] If [ %par1 Set ]
A2: Perform Task [ Name:Writelog Priority:10 Parameter 1 (%par1):states Parameter 2 (%par2):El cambio de estado está bloqueado por %STATE Return Value Variable: Stop:Off ] If [ %STATELOCK Set ]
A3: Goto [ Type:Action Label Number:1 Label:Clear & Stop ] If [ %STATELOCK Set ]
A4: Perform Task [ Name:Writelog Priority:10 Parameter 1 (%par1):states Parameter 2 (%par2):No de puede cambiar a %NEWSTATE porque es el estado actual Return Value Variable: Stop:Off ] If [ %NEWSTATE ~ %STATE ]
<No change>
A5: Goto [ Type:Action Label Number:1 Label:Clear & Stop ] If [ %NEWSTATE ~ %STATE ]
A6: Variable Set [ Name:%lstime To:%TIMES - %TSTART Do Maths:On Append:Off ]
A7: If [ %NEWSTATE ~ %LASTSTATE ]
A8: Perform Task [ Name:Writelog Priority:10 Parameter 1 (%par1):states Parameter 2 (%par2):Ha intentado volver a %LASTSTATE demasiado rápido (%lstime s) Return Value Variable: Stop:Off ] If [ %lstime < 5 ]
<State change too fast>
A9: Goto [ Type:Action Label Number:1 Label:Clear & Stop ] If [ %lstime < 5 ]
A10: End If
A11: Variable Set [ Name:%LASTSTATE To:%STATE Do Maths:Off Append:Off ]
A12: Variable Set [ Name:%STATE To:%NEWSTATE Do Maths:Off Append:Off ]
A13: Perform Task [ Name:Writelog Priority:10 Parameter 1 (%par1):states Parameter 2 (%par2):Se cambia el estado de %LASTSTATE a %NEWSTATE tras %lstime segundos Return Value Variable: Stop:Off ]
<Set new state start time>
A14: Variable Set [ Name:%TSTART To:%TIMES Do Maths:Off Append:Off ]
<Clear & Stop>
A15: Anchor
A16: Variable Clear [ Name:%NEWSTATE Pattern Matching:Off ]
A17: Bluetooth [ Set:Off ] If [ %STATE !~ OUTSIDE/CAR ]

Profile: Near Home (14)
Notification: no
State: Cell Near [ Cell Tower
** lista de antenas cerca de casa **
Ignore Cells:* ]
Enter: Anon (15)
A1: Variable Set [ Name:%NEAR_WIFI To:1 Do Maths:Off Append:Off ]

Exit: Anon (16)
A1: Variable Set [ Name:%NEAR_WIFI To:0 Do Maths:Off Append:Off ]

Profile: Near Chalet (21)
Notification: no
State: Cell Near [ Cell Tower
** lista de antenas cerca del chalet de mis padres **
Ignore Cells:* ]
Enter: Anon (22)
A1: Variable Set [ Name:%NEAR_WIFI To:1 Do Maths:Off Append:Off ]

Exit: Anon (23)
A1: Variable Set [ Name:%NEAR_WIFI To:0 Do Maths:Off Append:Off ]

Profile: Near Work (17)
Notification: no
State: Cell Near [ Cell Tower
** lista de antenas cerca del trabajo **
Ignore Cells:* ]
Enter: Anon (18)
A1: Variable Set [ Name:%NEAR_WORK To:1 Do Maths:Off Append:Off ]

Exit: Anon (19)
A1: Variable Set [ Name:%NEAR_WORK To:0 Do Maths:Off Append:Off ]

Profile: Near WIFI (30)
Notification: no
State: Variable Value [ %NEAR_WIFI ~ 1 ]
Enter: Anon (31)
A1: WiFi [ Set:On ]

Exit: Anon (32)
A1: WiFi [ Set:Off ]

Profile: Search Car (60)
Notification: no
State: Variable Value [ %STATE ~ OUTSIDE ]
State: BT Near [ Name:** Nombre del BT de mi coche ** Address:* Major Device Class:Any Standard Devices:On Low-Energy (LE) Devices:Off Unpaired Devices:Off Toggle BlueTooth:On ]
Enter: Anon (61)
A1: Bluetooth [ Set:On ]
A2: Perform Task [ Name:Writelog Priority:10 Parameter 1 (%par1):states Parameter 2 (%par2):Entra en Search Car Return Value Variable: Stop:Off ]

Exit: Anon (76)
A1: Perform Task [ Name:Writelog Priority:10 Parameter 1 (%par1):states Parameter 2 (%par2):Sale de Search Car Return Value Variable: Stop:Off ]

Profile: WIFI State Trigger (33)
Notification: no
State: Variable Value [ %NEAR_WIFI ~ 1 & %WIFICON ~ 1 & %STATE ~ OUTSIDE/SLEEP/HOME/CHALET/KNOWN WIFI ]
Enter: Anon (34)
A1: If [ %WIFII ~ *SSID_CASA* ]
A2: Variable Set [ Name:%NEWSTATE To:HOME Do Maths:Off Append:Off ]
A3: Else If [ %WIFII ~ *SSID_CASA_DE_MIS_PADRES* ]
A4: Variable Set [ Name:%NEWSTATE To:CHALET Do Maths:Off Append:Off ]
A5: Else If [ %WIFII ~ *CONNECTION* ]
A6: Variable Set [ Name:%NEWSTATE To:KNOWN WIFI Do Maths:Off Append:Off ]
A7: End If

Exit: Anon (59)
A1: Variable Set [ Name:%nearwifi To:%NEAR_WIFI Do Maths:Off Append:Off ]
A2: Variable Set [ Name:%timeout To:%TIMES + 180 Do Maths:On Append:Off ]
A3: Perform Task [ Name:Writelog Priority:10 Parameter 1 (%par1):states Parameter 2 (%par2):Saliendo de WIFI NEAR, esperando a ver si reconecta Return Value Variable: Stop:Off ]
A4: Wait Until [ MS:0 Seconds:30 Minutes:0 Hours:0 Days:0 ] If [ %PACTIVE ~ *,WIFI State Trigger,* | %TIMES > %timeout ]
A5: Perform Task [ Name:Writelog Priority:10 Parameter 1 (%par1):states Parameter 2 (%par2):Fin de la espera, conectado: %WIFICON Return Value Variable: Stop:Off ]
<If we wasn't near WIFI and now we are again>
A6: Notify [ Title:Antena Nueva Text:Se ha encontrado una antena nueva Icon:hd_alerts_and_states_error Number:0 Permanent:Off Priority:3 ] If [ %nearwifi ~ 0 & %NEAR_WIFI ~ 1 ]
<We didn't reconnect>
A7: Variable Set [ Name:%NEWSTATE To:OUTSIDE Do Maths:Off Append:Off ] If [ %WIFICON ~ 0 ]

Profile: Work State Trigger (38)
Notification: no
State: Calendar Entry [ Title:* Location:* Description:* Available:Any Calendar:*Mi calendario de trabajo* ]
State: Variable Value [ %NEAR_WORK ~ 1 & %STATE ~ OUTSIDE/WORK ]
Enter: Anon (39)
A1: Variable Set [ Name:%NEWSTATE To:WORK Do Maths:Off Append:Off ]

Exit: Anon (40)
A1: Variable Set [ Name:%nearwork To:%NEAR_WORK Do Maths:Off Append:Off ]
A2: Variable Set [ Name:%timeout To:%TIMES + 180 Do Maths:On Append:Off ]
A3: Wait Until [ MS:0 Seconds:30 Minutes:0 Hours:0 Days:0 ] If [ %NEAR_WORK ~ 1 | %timeout > %TIMES ]
A4: If [ %nearwork ~ 0 & %NEAR_WORK ~ 1 ]
A5: Notify [ Title:Antena Nueva Text:Se ha encontrado una antena nueva Icon:hd_alerts_and_states_error Number:0 Permanent:Off Priority:3 ]
A6: Stop [ With Error:Off Task: ]
A7: End If
A8: Variable Set [ Name:%NEWSTATE To:OUTSIDE Do Maths:Off Append:Off ]

Profile: Car State Trigger (62)
Notification: no
State: BT Connected [ Name:*Bt de mi coche* Address:* ]
Enter: Anon (63)
A1: Bluetooth [ Set:On ]
A2: Variable Set [ Name:%timeout To:%TIMES + 30 Do Maths:On Append:Off ]
A3: Variable Set [ Name:%NEWSTATE To:CAR Do Maths:Off Append:Off ]
A4: Wait Until [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ] If [ %STATE ~ CAR | %TIMES > %timeout ]
A5: Variable Set [ Name:%STATELOCK To:1 Do Maths:Off Append:Off ] If [ %STATE ~ CAR ]

Exit: Anon (64)
A1: Variable Set [ Name:%timeout To:%TIMES + 60 Do Maths:On Append:Off ]
A2: Wait Until [ MS:0 Seconds:30 Minutes:0 Hours:0 Days:0 ] If [ %BTCON ~ 1 | %timeout > %TIMES ]
A3: If [ %BTCON ~ 0 ]
A4: Variable Clear [ Name:%STATELOCK Pattern Matching:Off ]
A5: Variable Set [ Name:%NEWSTATE To:OUTSIDE Do Maths:Off Append:Off ]
A6: Bluetooth [ Set:Off ]
A7: End If

Profile: Sleep State Trigger (66)
Notification: no
Time: From %SLEEPSTART Till %SLEEPEND
State: Variable Value [ %STATE !~ OUTSIDE/CAR ]
Enter: Anon (67)
A1: Variable Set [ Name:%NEWSTATE To:SLEEP Do Maths:Off Append:Off ]
A2: Variable Set [ Name:%timeout To:%TIMES + 15 Do Maths:On Append:Off ]
A3: Wait Until [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ] If [ %NEWSTATE !Set | %TIMES > %timeout ]
A4: Variable Set [ Name:%STATELOCK To:1 Do Maths:Off Append:Off ]

Exit: Anon (68)
A1: Variable Clear [ Name:%STATELOCK Pattern Matching:Off ]
A2: If [ %NEAR_WIFI ~ 1 ]
A3: Silent Mode [ Mode:On ]
A4: WiFi [ Set:On ]
A5: Else
A6: Variable Set [ Name:%NEWSTATE To:OUTSIDE Do Maths:Off Append:Off ]
A7: End If

Profile: Work (56)
State: Variable Value [ %STATE ~ WORK ]
Enter: Anon (57)
A1: Perform Task [ Name:2GToggle Priority:10 Parameter 1 (%par1):1 Parameter 2 (%par2): Return Value Variable: Stop:Off ] If [ %2GCON ~ 0 ]
A2: If [ %CASCOS ~ 0 ]
A3: Silent Mode [ Mode:Vibrate ]
A4: Media Volume [ Level:0 Display:Off Sound:Off ]
A5: End If

Exit: Anon (58)
A1: Perform Task [ Name:2GToggle Priority:10 Parameter 1 (%par1):0 Parameter 2 (%par2): Return Value Variable: Stop:Off ] If [ %2GCON ~ 1 ]
A2: Silent Mode [ Mode:Off ]
A3: Media Volume [ Level:12 Display:Off Sound:Off ] If [ %VOLM ~ 0 ]

Profile: Sleep (69)
State: Variable Value [ %STATE ~ SLEEP ]
Enter: Anon (70)
A1: Mobile Data [ Set:Off ]
A2: WiFi [ Set:Off ] If [ %WIFI ~ on ]

Exit: Anon (71)
A1: Silent Mode [ Mode:On ]
A2: Mobile Data [ Set:On ]
A3: Wait [ MS:0 Seconds:0 Minutes:5 Hours:0 Days:0 ]
A4: Silent Mode [ Mode:Off ]

Profile: WIFICon (2)
State: Wifi Connected [ SSID:* MAC:* IP:* ]
Enter: Anon (3)
A1: Variable Set [ Name:%WIFICON To:1 Do Maths:Off Append:Off ]

Exit: Anon (4)
A1: Variable Set [ Name:%WIFICON To:0 Do Maths:Off Append:Off ]

Profile: BTCon (11)
State: BT Connected [ Name:* Address:* ]
Enter: Anon (12)
A1: Variable Set [ Name:%BTCON To:1 Do Maths:Off Append:Off ]

Exit: Anon (13)
A1: Variable Set [ Name:%BTCON To:0 Do Maths:Off Append:Off ]

Writelog (28)
A1: Variable Set [ Name:%secs To:%TIMES % 60 Do Maths:On Append:Off ]
A2: Variable Set [ Name:%secs To:0%secs Do Maths:Off Append:Off ] If [ %secs < 10 ]
A3: Write File [ File:/sdcard/%par1.log Text:%DATE %TIME:%secs: %par2 Append:On Add Newline:On ]


Tengo pendiente implementar algunas cosas como por ejemplo actualizar dinamicamente los valores %SLEEPEND y %SLEEPSTART que uso para entrar/salir del modo SLEEP en funcion de si es entre semana, fin de semana o festivo y pulir algunos detalles que hacen que a veces falle (3 o 4 veces al mes algunos cambios de estado no se hacen correctamente) pero nunca encuentro el momento y me funciona suficientemente bien como está :silbando:

GraphicAdventure
27/01/15, 20:05:09
no hay ninguna penalización importante por usar más perfiles, ni en impacto de batería ni en rendimiento

No tiene impacto, pero prefiero mantener todo más reducido y agrupado, me ayuda a reducir el riesgo de fallos.
También puede darse el caso sea mejor tener 2 perfiles que 1 por la complejidad de condiciones que se tendrían que poner para tener 1 perfil.
Pero en esta situación realmente simplifica las cosas.

la lista de antenas va cambiando (supongo que porque las compañias añaden nuevas antenas con el tiempo y por averías reemplazan algunas) y si lo tienes todo junto es más engorroso.

Eso es cierto, sé que las cambian porque eso me ocurrió, pero yo no juntaría antenas de wifi importantes (casa, trabajo, ...), sería solo bajo ciertos criterios y guardaría las antenas de cada uno en un archivo.


Pero cuando implementaron en una version de Tasker el contexto "bluetooth cercano" decidí cambiarlo para probarlo y me he dado cuenta de que no consume apenas batería aunque se vaya encendiendo y apagando todo el rato cuando estoy fuera de casa

No dispongo de ese bluetooth, lo tendré en cuenta.
¿Y la conexión es estable o sufre microcortes?
No utilizo bluetooth y wifi cercanos también debido a los microcortes.
Estoy pensando si pongo el bluetooth cercano y quito las acciones de bluetooth aunque sea solo para probar todo funcionando.

Caravantes
28/01/15, 01:08:51
cuando lo tengas todo definido haces un post explicando los detalles de implementación

Suscribo esa petición para GraphicAdventure: un post o incluso un hilo nuevo explicando el funcionamiento y todos los detalles. Es un método muy ingenioso. Gracias por compartirlo.

GraphicAdventure
29/01/15, 11:39:10
Ya lo tengo, la estructura es uniforme y corta, las pautas a seguir son pocas y fáciles.
Lo que sí tengo que explicar es el porqué de ciertas condiciones en algunas acciones y el orden en que están.
Cuando pueda coloco el tema.