Dispositivo virtual para controlar varias persianas a la vez en HC2

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.

globalpersianas

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.

Antonio Maestre
Ingeniero Industrial, amante de las nuevas tecnologías y linuxero convencido. Su primer ordenador fue un ZX Spectrum que le regalaron a los 7 años y desde entonces no ha parado de teclear! Autodidacta y lector de información tecnológica compulsivo.

16 comentarios en «Dispositivo virtual para controlar varias persianas a la vez en HC2»

  1. 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.

    Responder
  2. 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.

    Responder
  3. 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

    Responder
  4. 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.

    Responder
  5. 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?

    Responder
  6. 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.

    Responder
  7. 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.

    Responder
  8. 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

    Responder
  9. 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.

    Responder
  10. 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.

    Responder
  11. 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?

    Responder
  12. 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?

    Responder
  13. 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

    Responder

Deja un comentario

También te puede interesar

Compatibilidad de los motores Z-Wave de Cherubini con distintos controladores

En los últimos meses, os he hablado en Domótica Doméstica de los motores de persianas, toldos y estores con tecnología Z-Wave de la marca italiana Cherubini. Concretamente os hablé de esos motores en un primer articulo de presentación, y ...

Lo que debes saber sobre el nuevo plugin Z-Wave JS para Jeedom

El equipo de Jeedom trabaja desde hace unos meses en un nuevo plugin para gestionar la tecnología Z-Wave en la solución Jeedom. Se trata ...

El Smart Dry Contact Switch 7 de WiDom ya está soportado por eedomus

Hace pocas semanas os hablaba de un módulo oculto de “contacto seco” (libre de potencial), denominado Smart Dry Contact Switch 7 de la marca ...

No es Magia

Lo que yo hago lo puedes encontrar en YouTube y hacerlo por ti mismo dedicándole muchas horas. ¡Si tienes tiempo y te gusta la tecnología, hazlo así!

Si quieres ir a tiro hecho:

Quiero trabajar con Jordi