Hola a todos, en esta nueva entrega vamos a ver un poquito en profundidad el funcionamiento de los escenarios o escenas en Jeedom. Para ello, y aprovechando que llega la temporada navideña y que a todos nos preocupa el tema de la seguridad, vamos a tratar de configurar un escenario a modo de ejemplo que os sirva para crear vuestro propio simulador de presencia. El cuan complejo lo queráis hacer lo dejo a vuestra imaginación.
Bien, como comentaba en el párrafo anterior, llegan las tan señaladas fiestas navideñas, días de mucho trasiego, de muchas idas y venidas, y sobre todo días en los que dejamos nuestro hogar a solas muy a menudo. Lamentablemente no todo el mundo cree en el espíritu de la navidad y aprovecha estas fechas para hacer su agosto particular, arruinando las fiestas de más de uno, si amigos, me refiero a los amigos de lo ajeno.
Para poder evitar o al menos dificultar que estos amigos o amigas sepan si nuestra vivienda está o no ocupada, vamos a diseñar un sencillo a la par que complejo escenario para controlar que nuestras luces, televisores, equipos de música, funcionen con la intención de simular que estamos en casa. Para empezar daré unas pequeñas pautas para indicaros como funcionan los bloques dentro de un escenario y esto os servirá de guía, no solo para realizar éste, sino muchos otros en el futuro.
Comencemos: (los plugins)
Teniendo en cuenta que los disparadores de los escenarios más o menos los sabéis manejar, veamos cómo funciona un escenario a la hora de ejecutar una acción dentro de un bloque. Como en la mayoría de los lenguajes de programación tiene un fundamento estructurado, esto quiere decir que las acciones se ejecutan dentro de los bloques, y que a su vez si esos bloques tienen otros bloques dentro de ellos, solo se ejecutaran si previamente se ejecuta el superior.
Ahora veamos como aplicar esto a un caso real, nuestro primer escenario de simulación de presencia “casero”.
En primer lugar veamos qué plugins o complementos vamos a usar y/o necesitar para la realización de dicho escenario:
Necesitamos dichos plugins o complementos ya que nuestro escenario se va a basar básicamente en la condición del estado de la alarma, y la hora del atardecer además de controlar el disparador del propio escenario. El plugin telegram es opcional.
Para activar nuestras luces usaremos el comando “atardecer” que nos concede el plugin meteo. Este comando tiene la peculiaridad de que hará ejecutar nuestro escenario justo a la hora que cada día está previsto el inicio del atardecer en nuestra localidad.
Para Activar o desactivar nuestro escenario usaremos el plugin Alarma.
Y cada día a media noche, se volverá a ejecutar nuestro escenario con la rutina de apagado de luces. Dicho esto veamos la construcción de nuestro simulador “casero”.
Bloque principal o inicial
Bien, nuestro primer bloque contiene 3 condiciones que se han de cumplir para que se lleve a cabo, que son: que la alarma esté activada, que el atardecer sea real y que el escenario no se haya ejecutado “mecánicamente”. Este último lo explicaré más adelante.
Si la condición se cumple, lo primero que vamos a hacer es crear unas variables para indicar a nuestras luces cuándo deben apagarse de forma totalmente aleatoria. El motivo de incluir el timer en una variable es para enviarnos un mensaje a Telegram para indicarnos a qué horas se ejecutará cada bloque de tiempo, música o cualquiera que sea el dispositivo que incluyáis en vuestra simulación. De vosotros depende de si necesitáis este formato o no.
Como podéis ver en la imagen, se crean cada una de las variables necesarias para nuestro escenario, y se le da un valor variable entre el tiempo mínimo y el tiempo máximo (en minutos) que queréis que se ejecute cada bloque “En”, si os fijáis bien, hay una variable que simplemente suma el valor de otras dos, esto esta hecho así (quizás hay una forma más limpia, que yo aun desconozco con bloque php) para poder sumar el valor de las dos variables y saber a qué hora se ejecutarán el bloque digamos Luz Salón, ya que tenemos que saber cuántos minutos va durar, primero el arranque, y luego el apagado del primer grupo de luces, en este ejemplo la luz del garaje. Y esto es lo que nos llegaría a Telegram:
¡¡¡ Atención !!! El simulador de presencia ha sido iniciado
La luz del sótano se encenderá a las 17h58 minutos
La luz del sótano se apagará a las 18h03 minutos,
a esa misma hora, las 18h03, se encenderán la luz del salón y el simulador de televisión.
La luz de la zona del televisor se encenderá 5 veces
Veamos el sub-bloque que controla nuestro primer bloque en más detalle
Como ya hemos comentado, éste es digamos nuestro bloque principal, el bloque que controla la o las luces que más tiempo van a estar encendidas y/o aquellas de inicio de la simulación. Como veréis, el primer sub-bloque “En” se ejecutará en un intervalo de tiempo aleatorio indicado en la variable. Encenderá nuestra luz del garaje y nos manda un mensaje a Telegram informándonos de este hecho (aprovecho para deciros que los mensajes de telegram son opcionales, yo los uso durante un tiempo prudencial para ver que los bloques se ejecutan cuando y como yo he definido y si no así es más sencillo encontrar dónde puede estar el fallo). Seguidamente y colgando del anterior, tenemos otros sub-bloque “En” que al igual que el anterior se ejecutará en un tiempo aleatorio que se haya definido en la variable. Seguidamente apagará la luz del garaje y encenderá la luz del comedor y el simulador de televisión, en nuestro caso. Cómo apagar estas luces lo mostraré más adelante.
Bloque intermedio o bloque de encendido aleatorio intermedio
Ahora veamos nuestro bloque intermedio, aquel que va a controlar las luces que queremos encender entre medias para dar un poco de mayor realismo a la simulación, como pueden ser luces de cocina, baños… etc.
Este bloque es el que más quebraderos de cabeza me dio plantearlo, ya que en un principio pensaba que con un bloque tipo de 1 a x lo tenia resuelto, pero resulta que el bloque “en” en su interior a la hora de realizar el cron del “en”, se convierte en un “comando” por lo que cada vez que hace un loop borra el bloque “En” programado anterior. (Tened esto en cuenta para futuros proyectos). Así que finalmente tiré por lo de siempre, una condición más un contador variable que suma 1 en cada ejecución. El next, loop, while o como queráis llamarlo se realiza al final del bloque con el inicio nuevamente del escenario. En la condición inicial del bloque Si, veis que la condición es si el disparador es el “Atardecer” o “scenario”. Así lo que conseguimos es por un lado que se ejecute la primera vez que nuestro escenario detecte la llegada del atardecer y por otro, cada vez que lanzamos el “Inicio” del escenario el disparador en este caso sería “scenario”.
Bloque de cierre o Bloque final
Ahora toca el turno del bloque que apagará nuestras luces principales. En esta ocasión nuestra condición que se han de cumplir ambas son: por un lado que la alarma continúe activa y que el disparador del escenario sea la hora programada “schedule”. Una vez que la condición es cierta, volvemos a ejecutar un par de sub-bloques “En” con la hora de apagado de nuestras luces y otro sub-bloque con la traca final: el apagado de la luz del dormitorio. Una vez termina el segundo sub-bloque tenéis la ejecución de un comando que tal vez no conozcáis: remove_inat. Con él lo que hacemos es eliminar de un plumazo todos aquellos bloques que tenga hasta el momento programado el escenario. Como es posible que del bloque anterior tengamos alguna luz pendiente de encender y apagar, directamente lo eliminaríamos.
Bloque de desactivado
Y ya por último tenemos el bloque que se ejecutará en caso de que lleguemos a casa y desactivemos la alarma. He decidido no controlar que luces estén encendidas porque se supone que si llegamos de noche, es preferible que así queden y ya iremos apagando si lo creemos necesario. No obstante, como veis, vuelvo a ejecutar el remove_init para eliminar cualquier bloque programado pendiente de ejecutar.
En resumidas cuentas, tenemos un primer bloque SiNo que se activará cuando la alarma este activada y el atardecer sea real; aquí se encienden las luces principales que mantendremos más tiempo encendidas. Seguidamente tenemos el segundo bloque -llamémosle random- que se encargará de encender aleatoriamente las luces que le indiquemos; un tercer bloque que se ejecutará a media noche y que procederá al apagado aleatorio de luces y encendido de la luz de la habitación. Y por ultimo, el último bloque que solo se ejecutará en caso de que desactivemos la alarma, eliminando cualquier bloque programado previo.
Y nada más, cualquier duda o lo que necesitéis, como siempre, estaré encantado de responderos.
Gran tutorial, ¡muy util! pero para novatillos como yo, es un poco complejo.
No consigo localizar un tutorial que explique el funcionamiento de las escenas desde el principio y para torpes ¿hay alguno por aquí o por el foro? ¿qué me recomiendas leer para empaparme de como funcionan las escenas?
Haz tu pregunta en el foro y seguro que entre todos sacamos lo que quieres hacer.
Hola, muchísimas gracias por este tipo de artículos. Nos ayudan mucho.
Me funciona todo menos el disparador del atardecer…¿Donde lo ponéis exactamente: dentro del escenario o como una acción sobre valor dentro de la variable atardecer del plugin meteo? Y en cualquier caso, ¿Qué ponéis exactamente?
Gracias de nuevo, un saludo.