Super-estados

El mecanismo de super-estados permite determinar qué servicios estarán en marcha en cada momento, dentro de nuestro sistema OpenDomo. Estos son creados mediante el script addSystemState.sh, y se basa en un modelo de Máquina de estados multi-agente.

En otras palabras, simplemente con cambiar el estado de nuestro sistema multi-agente (Control -> Cambiar estado), los servicios requeridos para el nuevo estado serán activados y los innecesarios detenidos. De esta forma concentramos una importante funcionalidad y una gran variedad de posibilidades de configuración, en una operación muy sencilla para el usuario.

Ejemplo de configuración

Desde el apartado de configuración del sistema, podemos crear y eliminar los servicios fácilmente, empleando la interfaz estándar. Aquí nos pedirá el código y el nombre para cada estado, y a continuación podremos seleccionar qué servicios deben estar en marcha en cada uno de ellos (es importante tener en cuenta que será necesario instalar los módulos que nos proporcionen tales servicios).

Diagrama de estados

En el diagrama anterior podemos ver un ejemplo parcial de lo que sería una configuración de los super-estados de una instalación. Tal como podemos apreciar, al completarse el estado "boot" (arranque) el sistema pasaría por defecto a "en casa", dejando en marcha solamente aquellos servicios que nos puedan hacer la vida más cómoda. Por ejemplo, cuando el usuario cierre la puerta con llave el sistema pasará a "ausente", activando la video vigilancia, y viceversa al regresar. Si nos vamos por una temporada más larga, cambiaremos al estado "vacaciones"; este estado aplicaría unas restricciones energéticas mayores, y tal vez activando la simulación de presencia.

Al detectar una intrusión, el sistema pasaría al estado "alarma". También lo hará si estamos en casa y se detecta un incendio en la cocina, por ejemplo, aunque en este caso la alarma será sonora y no será necesario enviar un mensaje SMS o una llamada.

Aunque no se encuentre especificado en el gráfico, por supuesto es posible desactivar el sistema de alarma, aunque tal cosa sucederá de forma controlada, especialmente en el caso de la detección de intrusiones.

 

Algoritmo

El procedimiento de cambio de estado es bastante simple:

  1. el script rcS tomará el estado de origen y el de destino, y hará la diferencia entre los servicios de uno y del otro.
  2. Si el estado origen tiene configurado el servicio "serv1" y el estado destino no, se detendrá tal servicio.
  3. Si sucede lo contrario, el servicio será arrancado.
  4. Si ambos estados tienen configurado el mismo servicio, éste será recargado (mediante el parámetro "reload"), por si la configuración específica del servicio en tales estados difiere. Esta recarga empleará, siempre que sea posible, la señal de sistema SIGHUP, de modo que el servicio no se vea interrumpido.
AttachmentSize
Diagrama de estados18.72 KB