GraphicAdventure
31/01/15, 11:28:18
Este sistema impide que esté activo más de 1 estado a la vez.
Esta idea no es nueva y supe de ella hace poco cuando leí el tema de Maid "Autómata de estados" que trata precisamente de esto, así que podéis leerlo en el siguiente enlace, porque no tiene desperdicio:
http://www.htcmania.com/showthread.php?t=775813
Lo que hice fue utilizarlo de una forma más simple con el mismo resultado y los propios perfiles de estados controlan el sistema junto con la variable %Profile.
Es muy sencillo y se puede aplicar a los perfiles actuales sin necesidad de cambiarlos.
Utilizo nombres en inglés, así que pongo las correspondencias a los términos utilizados.
Voy a tratar de los 5 siguientes estados por este orden:
Night (noche) -> Wifi Home (wifi casa) - > Cell Home (antena casa) - > Car (coche) - > Fuera
Los interpreto como niveles, siendo Fuera el nivel 0. Siguiendo el esquema es: 3 -> 2 -> 1 -> 1-> 0
Fuera no tiene perfil, para entrar en estado Fuera hay que limpiar la variable %Profile (no ajustada).
Fuera se interpreta como estar en la calle o en ningún estado.
Cell Home es un estado diferente a Fuera pero también es estar en la calle.
Si cogemos el coche dentro de Cell Home, Car sigue siendo nivel 1 porque al salir del coche entramos en Fuera.
Para que un perfil se active dentro de este sistema, se utiliza el contexto estado de variable con el nombre del perfil a activar y el que le precede en nivel.
En la tarea de entrada cambiamos %Profile a perfil a activar.
En la tarea de salida cambiamos %Profile a perfil precedente si no cambió de nivel.
La estructura es la siguiente:
Contexto:
- Estado de variable: %Profile ~ perfil_precedente/este_perfil
- Otros contextos
Tarea de entrada:
A1: Establecer variable: %Profile A: este_perfil
Tarea de salida:
Ax: Establecer variable: %Profile A: perfil_precedente (SI) %Profile ~ este_perfil
La tarea de entrada sube un nivel, la de salida baja. Al subir un nivel, hay que tener en cuenta que se ejecuta la tarea de salida del perfil actual.
Si hay acciones que no queremos que se ejecuten, hay que excluirlas o detener la tarea en algún punto con la condición %Profile !~ este_perfil.
Si estamos en el último nivel, no se necesita la condición en la acción Ax de la estructura de la tarea de salida.
Pero si uno quiere tener uniformidad se puede seguir siempre la misma pauta e incluirla.
Hay que tener cuidado al utilizar %PACTIVE o %Profile como condiciones. Puede no estar activo pero %Profile no haber cambiado.
Listo. No hay que hacer nada más.
A continuación pongo perfiles funcionales de los estados, analizando ciertas situaciones.
Eliminé acciones y datos que no interesan, dejando los perfiles más legibles.
Incluyo también un perfil que enciende el bluetooth solo si cogí el coche al salir de casa.
Para reducir el tiempo de activación del bluetooth, utiliza además como contexto las antenas que encontró en los últimos 30 segundos trás la desconexión del mismo.
Esta idea no es nueva y supe de ella hace poco cuando leí el tema de Maid "Autómata de estados" que trata precisamente de esto, así que podéis leerlo en el siguiente enlace, porque no tiene desperdicio:
http://www.htcmania.com/showthread.php?t=775813
Lo que hice fue utilizarlo de una forma más simple con el mismo resultado y los propios perfiles de estados controlan el sistema junto con la variable %Profile.
Es muy sencillo y se puede aplicar a los perfiles actuales sin necesidad de cambiarlos.
Utilizo nombres en inglés, así que pongo las correspondencias a los términos utilizados.
Voy a tratar de los 5 siguientes estados por este orden:
Night (noche) -> Wifi Home (wifi casa) - > Cell Home (antena casa) - > Car (coche) - > Fuera
Los interpreto como niveles, siendo Fuera el nivel 0. Siguiendo el esquema es: 3 -> 2 -> 1 -> 1-> 0
Fuera no tiene perfil, para entrar en estado Fuera hay que limpiar la variable %Profile (no ajustada).
Fuera se interpreta como estar en la calle o en ningún estado.
Cell Home es un estado diferente a Fuera pero también es estar en la calle.
Si cogemos el coche dentro de Cell Home, Car sigue siendo nivel 1 porque al salir del coche entramos en Fuera.
Para que un perfil se active dentro de este sistema, se utiliza el contexto estado de variable con el nombre del perfil a activar y el que le precede en nivel.
En la tarea de entrada cambiamos %Profile a perfil a activar.
En la tarea de salida cambiamos %Profile a perfil precedente si no cambió de nivel.
La estructura es la siguiente:
Contexto:
- Estado de variable: %Profile ~ perfil_precedente/este_perfil
- Otros contextos
Tarea de entrada:
A1: Establecer variable: %Profile A: este_perfil
Tarea de salida:
Ax: Establecer variable: %Profile A: perfil_precedente (SI) %Profile ~ este_perfil
La tarea de entrada sube un nivel, la de salida baja. Al subir un nivel, hay que tener en cuenta que se ejecuta la tarea de salida del perfil actual.
Si hay acciones que no queremos que se ejecuten, hay que excluirlas o detener la tarea en algún punto con la condición %Profile !~ este_perfil.
Si estamos en el último nivel, no se necesita la condición en la acción Ax de la estructura de la tarea de salida.
Pero si uno quiere tener uniformidad se puede seguir siempre la misma pauta e incluirla.
Hay que tener cuidado al utilizar %PACTIVE o %Profile como condiciones. Puede no estar activo pero %Profile no haber cambiado.
Listo. No hay que hacer nada más.
A continuación pongo perfiles funcionales de los estados, analizando ciertas situaciones.
Eliminé acciones y datos que no interesan, dejando los perfiles más legibles.
Incluyo también un perfil que enciende el bluetooth solo si cogí el coche al salir de casa.
Para reducir el tiempo de activación del bluetooth, utiliza además como contexto las antenas que encontró en los últimos 30 segundos trás la desconexión del mismo.