Dispositivo virtual para controlar varias persianas a la vez en HC2

  • En este sencillo manual explicamos cómo controlar varias persianas al mismo tiempo desde un único dispositivo virtual a través de una serie de comandos.

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 Respuestas

  1. Dani dice:

    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.

  2. Antonio Maestre dice:

    Gracias Dani. Si tienes algún problema con el slider no dudes en preguntar.

  3. Francisco dice:

    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.

  4. Jakub Hartig dice:

    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

  5. Antonio Maestre dice:

    Prueba para el switch con turnOn y turnOff en lugar de value

  6. Francisco Carracedo dice:

    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.

  7. Antonio Maestre dice:

    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?

  8. Francisco Carracedo dice:

    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.

  9. Antonio Maestre dice:

    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.

  10. Francisco Carracedo dice:

    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

  11. Antonio Maestre dice:

    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.

  12. Francisco Carracedo dice:

    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.

  13. francisco ruiz dice:

    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?

  14. Javier Taco dice:

    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?

  15. Javier Taco dice:

    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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *