Qué son los scripts, para qué se utilizan y cómo se crean

Os dividimos esta entrada en varios apartados para mayor claridad

¿Qué es un script?

Los scripts son la herramienta que domoticz nos proporciona para introducir órdenes, condicionantes y demás relaciones entre dispositivos, tiempo, notificaciones, etc para automatizar funciones en el sistema.

Existen distintos tipos de scripts para programar desde domoticz: Blocky, Python, Lua y Dzvents. Para llegar a esa ruta, entramos desde SETUP ó CONFIGURACIÓN (según idioma predefinido):

¿Para qué se utiliza un script?

Los scripts se utilizan para infinidad de posibilidades:

  • Establecer relaciones entre dispositivos de tu sistema, como ejemplo básico: «si se abre la puerta, se enciende la luz de la entrada» o que «si el porcentaje de humedad del baño es superior al 90%, se enciende la ventilación forzada hasta que la humedad baje del 75%».
  • Enviar notificaciones cuando se reúnen ciertas condiciones, por ejemplo: «si el consumo de la vivienda supera la potencia contratada, desconectar la calefacción y notificar por telegram, por google home o por llamada telefónica a quien se designe«.
  • Establecer lógicas de tiempo, de posición, rutinas, patrones, etc, por ejemplo: «si ninguno de los habitantes de la casa se encuentra en la vivienda, se enciende la aspiradora y sólo si es en horario de 10.00 a 14.00″.
  • Generar rutinas complejas difíciles de conseguir con otros sistemas domóticos: «Cuando el coche se acerca a casa y quedan menos de 2 minutos para llegar, se abre la puerta del garaje, si es de noche se encienden las luces del jardín, del porche, de la entrada y del salón, se abre la puerta de casa sólo durante 5 minutos y, en caso de que la temperatura de la vivienda sea inferior a 20º, se encienda la calefacción cuando el coche se encuentra acercándose a casa y a 15 minutos de llegar, sólo en caso de haber producción solar de sobras».

Como veis, podemos rizar el rizo cuánto queramos. El quid de la cuestión está en tener los dispositivos correctos integrados en domoticz para jugar con ellos y facilitarnos la vida.

Cómo crear un script

Los scripts se introducen en la siguiente ruta:

Domoticz > Setup > More options > Events

La mejor manera de entender y aprender a crear scripts es leer y estudiar a fondo la siguiente web, a la que nosotros nos referimos como la biblia Dzvents: clica aquí para verla. En ella, se desarrolla todo el código necesario para establecer cualquier script Dzvents en domoticz.

Para empezar diremos que los scripts Dzvents tienen una estructura básica para todos ellos. En términos generales:

return {
on = {
devices/groups/scenes/etc... = {
'myDevice'
}
},
execute = function(domoticz, device)
domoticz.log('Device ' .. device.name .. ' was changed', domoticz.LOG_INFO)
end
}

Si os fijáis, empezamos siempre con return y con on.  Si utilizamos active = determinaremos simplemente si el script está activo o no, aunque será el botón superior de ON / OFF del script el que hará que esté activado o no, tanto si el active es true como false. Nosotros en nuestros ejemplos directamente NO LO PONEMOS.

Ese es el inicio del script, común a todos. Continuamos ya seleccionando el disparador de la acción que vamos a determinar. Para ello, vemos que en la bilbia Dzvents aparecen todas estas opciones:

3.1.2.1customEvents = { … } 3.0.0

3.1.2.2devices = { … }

3.1.2.3groups = { …}

3.1.2.4httpResponses = { …}

3.1.2.5scenes = { … }

3.1.2.6security = { … }

3.1.2.7system = { …} 3.0.0

3.1.2.8timer = { … }

3.1.2.9variables = { … }

Por ejemplo, si seleccionamos devices, estaremos especificando que será un dispositivo de nuestro domoticz el que desencadenará la acción que posteriormente determinaremos (Imaginemos como device nuestro dummy denominado Luces salon, si el script empieza como el siguiente ejemplo, estaremos especificando que si se produce un cambio de estado en «Luces salon» (que de ON pase a OFF o de OFF pase a ON), se desencadenará la acción que posteriormente habremos determinado en el script).

Muy importante. Los scripts distinguen entre mayusculas y minusculas, tildes y no tildes, etc. Hay que asegurarse siempre de redactar correctamente el nombre de los dispositivos para evitar errores.

Ahora deberemos escoger una acción directa si hay un cambio de estado en el disparador, o si queremos un condicionante con un IF y un THEN. Es decir, siguiendo con el ejemplo anterior, si queremos un IF y un then podríamos redactar el siguiente script: Si el device que hemos puesto como ejemplo antes (Luces salon) cambia de estado, y si Luces salon pasan a estar encendidas (ON), que se apaguen las luces del pasillo, que son el device Luces pasillo.

Como veis, después del IF y el THEN redactamos END en dos ocasiones, una por cada bloque de contenido, así como las llaves { }. Debemos tener una de cierre por cada una de apertura que hayamos introducido.

Incluimos el checkFirst para que domoticz ejecute la orden siempre y cuando se produzca lo siguiente:

  1. Haya un cambio de estado en Luces salon.
  2. En ese cambio de estado, Luces salon pasen a estar encendidas (ON).
  3. Luces pasillo estuvieran encendidas (ON).

En caso de que las luces del pasillo estuvieran apagadas, domoticz chequearía antes de lanzar la orden y no la enviaría porque ya estarían apagadas (OFF).

Para crear un script vamos a la ruta que comentábamos antes: domoticz > Setup > More Options > Events.

Una vez allí, clicamos sobre el + y seleccionamos Dzvents. Si seleccionamos all nos aparecerá un listado de posibilidades a escoger para empezar nuestro script y adaptar a nuestras necesidades.

Nosotros recomendamos siempre partir de la página de la biblia de Dzvents para redactar cualquier script, recuerda, la tienes aquí.

La función LOCAL

Muchos son los scripts que utilizan LOCAL en su estructura, veamos un ejemplo:

Si os fijáis, después del execute aparecen dos local (p1 y p2) que designan DHA en dos usos. Utilizamos local para designar una variable dentro del script en el que nos encontramos. Es una forma muy visual de ver donde has declarado la variable…
Simplemente se redacta:

 local "nombre de la variable" = xxx (la primera vez, a posteriori, nos referiremos a xxx como local "nombre de la variable")

Ejemplo:

local prueba = 1
prueba = 2
prueba = 3

Para que sea más visual, tenéis el mismo script que hemos puesto como ejemplo con los local DHA, sin utilizar los local para designar dichas variables:

Ejemplos de scripts

Os vamos a sugerir scripts para que podáis utilizar en vuestro sistema basados en Dzvents.

Te mostramos unos cuantos como ejemplo para que adaptes a tus necesidades:

Para cualquier duda o consulta tienes disponible el grupo de telegram «Domoticz a lo Spain» para entrar, ponerte cómodo y participar cuanto quieras.

Clica aquí para entrar en él

Cualquier duda, sugerencia o comentario será bien recibida en la web!