El uso de persianas exteriores en ventanas es muy nuestro, fuera de España raramente se utiliza y menos de forma tan generalizada. A la hora de domotizarlas, podemos optar por instalar motores capaces de reportar la posición pero su precio suele ser superior. Si optamos por fabricantes genéricos de módulos la gran mayoría solo permite fijar un tiempo (en segundos) de actuación.
La propia persiana sin domotizar cuenta con unos finales de carrera mecánicos, en los que dejará de actuar el motor tanto para subir como bajar aunque sigamos pulsando el botón, esto no varía. En este ejemplo utilizaremos módulos Zigbee del fabricante Moes MS-108ZR, los cuales reportan la posición y el estado, pero solo es un cálculo en función del tiempo que hemos definido en la calibración.
Para la instalación eléctrica intercalamos el modulo controlador entre los pulsadores y el motor de 4 cables de la persiana:
Si configuramos 10 segundos para bajar la persiana y se ha activado 5 segundos estára al 50%, esta aproximación no estaría mal en situaciones ideales… pero con el paso del tiempo la persiana empieza a no llegar a su posición inicial. Debemos tener en cuenta que, en la mayoría de casos, el tiempo que el motor actua para subir la persiana será ligeramente superior al que tarda en bajar.
Dependiendo de la calidad del motor, el rozamiento de la persiana, la propia gravedad… se irá incrementando la diferencia con tiempo, la solución pasaría por poder configurar dos tiempos diferentes, uno para subida y otro para bajada y que el mismo dispositivo calculara la diferencia en cada caso.
El fabricante aconsejaba utilizar su gateway de Zigbee y su aplicación para realizar el proceso de calibrado, el cual no está disponible de manera externa, tampoco daban seguridad de solucionar el problema de este manera…
Mientras tanto, una aproximación para resolver el problema parcialmente, sin tener que pasar por la consola de Zigbee2MQTT continuamente, será reproducir lo pasos de calibración de manera más automatizada.
Enviando el tiempo de calibración de nuevo en una posición diferente no soluciona el problema, pero si queremos fijar en 35 segundos el tiempo de subida/bajada de la persiana, con la persiana en la posición abierta máxima establecemos el valor de calibración en un tiempo diferente al actual (34 por ejemplo) y después el que queremos (35 de nuevo). De esta forma el dispositivo SI pone a cero la posición reportada, abrimos al 100% de nuevo y esperamos.
NOTA: seguramente existan otras posibilidades más directas para establecer y resetear el dispositivo, pero está sirve de manera sencilla para el mismo propósito.
Este tiempo de actuación en la que la persiana no se moverá al llegar al final de carrera, contará para el dispositivo vuelva al punto de partida correcto.
Para ello vamos a separar en un script la función [descargar YAML]:
- Nos aseguramos que la persiana este abierta al 100% en Home Assistant
- Esperamos el tiempo máximo, añadimos unos segundos adicionales de margen.
- Establecemos el valor de calibración a un valor diferente al actual, 34 segundos
- Establecemos el valor de calibración a nuestro valor deseado, 35 segundos (la posición reportada se resetea)
- Ajustamos de nuevo a la posición abierta al 100%
Si además queremos que se regule habitualmente podemos crear una automatización, por ejemplo una vez al día entre las 9h y las 21h, si detecta que lleva 10 segundos en la posición reportada como abierta al 100%. Pudiendo personalizar en cada instalación según el uso. [descargar YAML]
NOTA 1: al añadir una condición que comprueba cuando se ejecutó por última vez la automatización, parece existir un bug que no permite lanzar correctamente.
{{ state_attr('automation.auto_calibrar_persiana_1', 'last_triggered') | default(today_at(), true) < today_at('09:00') }}
NOTA 2: actualizado con otra opción para comprobar si la automatización se ha ejecutado hace menos de X minutos/horas
{{ now() - state_attr('automation.auto_calibrar_persiana_1', 'last_triggered').astimezone() > timedelta(minutes=30) }}
Como método alternativo y rápido, es posible establecer la calibración cuando la persiana esté al 100% durante 10 segundos y después del proceso ponerla al 99% para evitar que esté ejecutándose continuamente. [descargar YAML]