Generalmente una de las primeras acciones al domotizar nuestra casa es automatizar todas las persianas que tengamos. En este ámbito lo usual es hacer uso de los dispositivos ocultos que intercalamos entre los motores y los controles locales (pulsadores). Estos pulsadores y módulos ocultos de control de motores de las persianas nos permiten subirlas y bajarlas a nuestro antojo de forma totalmente individual, para que se adapten a nuestras necesidades.
Sin embargo, suele ser habitual que también queramos subir, bajar, parar o establecer en posiciones predefinidas un conjunto de persianas al mismo tiempo o en su totalidad. Por ejemplo, al salir de casa en lugar de ir persiana a persiana, nos puede interesar controlar todas juntas. Esto lo podemos hacer a través de la creación de un dispositivo virtual para facilitar esa gestión, y hoy vamos a explicar paso a paso y comando a comando cómo podemos hacerlo en Home Center de Fibaro.
El dispositivo en cuestión cuenta con 4 botones (subir, bajar, parar y una posición predefinida), así como una barra de deslizamiento para establecer posiciones intermedias. Lo primero que debéis hacer es localizar el ID de los dispositivos que queréis controlar. En un HC2 de Fibaro la forma más rápida es acudir a un navegador web y teclear:
http://IPDETUHC2/api/devices
Otra forma es acudir a la configuración del dispositivo en cuestión y allí encontraréis el ID de cada una de las persianas que queráis controlar. Os recomendamos que anotéis cada ID.
Ahora procederemos a crear un nuevo dispositivo virtual, que contará con cuatro botones y un slider. Copiaremos el siguiente código en cada uno de los botones, sin olvidar personalizar el listado de dispositivos con los vuestros separados por comas.
- Subir
local dispositivos={IDsTUSDISPOSITIVOS}; -- Por ejemplo: {23,22,21,7,13,15,12} for indice = 1, #dispositivos, 1 do if (tonumber(fibaro:getValue(dispositivos[indice], "value")) < 99) then fibaro:debug("Subiendo dispositivo " .. dispositivos[indice]); fibaro:call(dispositivos[indice], "open"); fibaro:call(dispositivos[indice], "setValue", "99"); else fibaro:debug("Ya estaba subido dispositivo " .. dispositivos[indice]); end end
- Bajar
local dispositivos={IDsTUSDISPOSITVOS} -- Por ejemplo: {23,22,21,7,13,15,12}; for indice = 1, #dispositivos, 1 do if (tonumber(fibaro:getValue(dispositivos[indice], "value")) > 0) then fibaro:debug("Bajando dispositivo " .. dispositivos[indice]); fibaro:call(dispositivos[indice], "close"); fibaro:call(dispositivos[indice], "setValue", "0"); else fibaro:debug("Ya estaba bajado dispositivo " .. dispositivos[indice]); end end
- Parar
local dispositivos={IDsTUSDISPOSITIVOS} -- Por ejemplo: {23,22,21,7,13,15,12}; for indice = 1, #dispositivos, 1 do fibaro:debug("Parando dispositivo " .. dispositivos[indice]); fibaro:call(dispositivos[indice], "stop"); end
- Posición predefinida
En este caso se ha tomado como ejemplo de posición predefinida una situación en la que queramos que nuestras persianas exteriores se sitúen entreabiertas, al 36 %, y las persinas interiores completamente bajadas, al 0 %.
local dispositivos_ext={IDsTUSDISPOSITIVOS} --Dispositivos ventanas exteriores, por ejemplo: {23,22,21,7}; for indice = 1, #dispositivos_ext, 1 do if (tonumber(fibaro:getValue(dispositivos_ext[indice], "value")) == 36) then fibaro:debug("Ya estaba en posición dispositivo " .. dispositivos_ext[indice]); else fibaro:debug("Ubicando dispositivo " .. dispositivos_ext[indice]); fibaro:call(dispositivos_ext[indice], "setValue", "36"); end end local dispositivos_int={IDsTUSDISPOSITIVOS}; --Dispositivos ventanas interiores, por ejemplo: {13,15,12}; for indice = 1, #dispositivos_int, 1 do if (tonumber(fibaro:getValue(dispositivos_int[indice], "value")) > 0) then fibaro:debug("Bajando dispositivo " .. dispositivos_int[indice]); fibaro:call(dispositivos_int[indice], "close"); fibaro:call(dispositivos_int[indice], "setValue", "0"); else fibaro:debug("Ya estaba bajado dispositivo " .. dispositivos_int[indice]); end end
- Deslizable
local dispositivos={IDsTUSDISPOSITIVOS} -- Por ejemplo: {21,23,22,7,13,15,12}; for indice = 1, #dispositivos, 1 do fibaro:debug("Ubicando dispositivo " .. dispositivos[indice]); fibaro:call(dispositivos[indice], "setValue", _sliderValue_+0); end
Es importante que el ID de este slider sea Slider1.
- Main Loop
Por último, personalizaremos el código que se ejecuta en el dispositivo virtual de forma reiterada:
local dispositivos={IDsTUSDISPOSITIVOS}; -- Por ejemplo: {21,23,22,7,13,15,12}; local dispositivo_virtual=fibaro:getSelfId(); local media=0; local actual=0; for indice = 1, #dispositivos, 1 do media=media+tonumber(fibaro:getValue(dispositivos[indice], "value")); -- fibaro:debug(media); end media=math.floor((media/#dispositivos)); fibaro:debug("Media:" .. media); actual=math.floor(tonumber(fibaro:getValue(dispositivo_virtual, "ui.Slider1.value"))); fibaro:debug("actual: " .. actual); if (media==actual) then fibaro:debug("Actualizado"); else fibaro:debug("Actualizando slider"); fibaro:call(dispositivo_virtual, "setProperty", "ui.Slider1.value", media); fibaro:call(dispositivo_virtual, "setSlider", "Slider1", media); end
Podemos crear tantos dispositivos de este estilo, o tantos botones predefinidos como deseemos. Esperamos que esta información sea de utilidad y os animéis con este tipo de dispositivos virtuales que os ayudarán mucho con vuestras instalaciones domóticas.
Muchisimas gracias, muy práctico, utilizaba escenas para realizar estas mismas tareas, con esta solución es mucho mas sencillo, solo me falta que me funcione el slider.
Gracias Dani. Si tienes algún problema con el slider no dudes en preguntar.
Hola, Antonio. Me ha funcionado a la primera. Enorme!!! A los que no escribimos código, este código LUA prácticamente hecho nos viene de perlas. Muchas gracias por el artículo.
Un crack Antonio. 😉
Gracias Antonio. Yo lo aplique para para manejar luces con dimmer de fibaro y controlador de rgbw. me va de maravilla. solo no me actua sobre el rele.Puede que funciona con otos valores? y por esto no actua? Si me podias ayudar te estaria muy agradecido. Gracias y saludo
Prueba para el switch con turnOn y turnOff en lugar de value
Hola, Antonio.
Después de tanto tiempo utilizando este dispositivo virtual, ahora resulta que no me funciona. Creo que ha sido con la subida de la versión del HC2 4.070. Creo que ahora han incluido un campo de IP y puerto TCP que antes no me suena que viniera.
¿Hay que hacer algún cambio al código LUA o la parametrización para que funcione?. Muchas gracias por tu ayuda. Saludos.
Hola Francisco,
Esos campos siempre han estado… pero te fijaste ahora jajajaja
A priori no hay que hacer cambio alguno. Yo estoy en 4.071 y no he tenido que cambiar absolutamente nada. ¿Qué error te da?
Hola, Antonio. Gracias por tu rápida respuesta, primero de todo. Pues el problema es que no hace nada. No funciona a ninguna instrucción cuando hace un par de días sí lo hacía. Y, que yo sea consciente, no he cambiado nada. ¿Hay que poner algo en la IP y el puerto? ahora aparece unas comillas (“””) y el puerto 80 respectivamente. Gracias.
El tema de IP y puerto no lo toques. El único problema que se me ocurre es que el número de dispositivo de cada una de las persianas hubiera cambiado. Revísalo.
Hola, Antonio. He revisado el número de dispositivo y está correcto. De hecho, he vuelto a crear desde cero siguiendo tus instrucciones en esta página, el mismo dispositivo virtual y sigue sin funcionar. Lo curioso es que son dos persianas unidas en este dispositivo virtual y cada una de ellas funciona perfectamente si las muevo en su propio dispositivo individual fuera del dispositivo virtual. Le he dado mil vueltas y no entiendo qué puede estar pasando ¿Se te ocurre algo? Gracias
Pues no se me ocurre nada. No hay motivo alguno para que no funcione. Yo estoy en 4.071 y venía de 4.070 en mi HC2 y jamás he tenido problemas. Solo se me ocurre que pases a 4.071.
Hola, Antonio. Sólo para comentarte que pude volver a hacer funcionar los dispositivos virtuales. No sé por qué, pero tras un reinicio del HC2, volvierton a funcionar. No lo entiendo pero algo debió quedarse pillado. Gracias por tu ayuda.
hola Antonio, tendria una pregunta por si puedes contestarmela. Tengo una persiana con motor pero la manejo solo con el mando a distancia ya que decidi no poner pulsador de pared. Que me aconsejas para domotizarla. Y otra pregunta: se pueden domotizar los mandos a distancia de la casa?
hola hice todo lo que muestra el tutorial pero no me funciona ningun boton, el id de mis dispositivos son 9,14,18 ¿en que lineas nomas debo poner los id de mis dispositivos?
local dispositivos={9,14,18};
for indice = 1, #dispositivos, 1 do
if (tonumber(fibaro:getValue(dispositivos[indice], “value”)) < 99)
then
fibaro:debug("Subiendo dispositivo " .. dispositivos[indice]);
fibaro:call(dispositivos[indice], "open");
fibaro:call(dispositivos[indice], "setValue", "99");
else
fibaro:debug("Ya estaba subido dispositivo " .. dispositivos[indice]);
end