Hoy voy a contar una de las ventajas que aporta el tener vinculado este aspirador a openHAB. Truco que total o parcialmente se puede aplicar a otros robots de Xiaomi o de otros fabricantes. Aunque ya funciona muy bien, aún se puede mejorar!
Desde ya hace un tiempo, tenemos en casa un Xiaomi Mi Robot, de la primera generación. Estamos más que contentos con él, por lo bien que limpia y porque se deja «hackear».
En casa tenemos alfombras y algún que otro pequeño escalón, ninguno de los dos suponen un gran problema para ella, aunque de vez en cuando se queda atascada intentando hacerles frente, y eso la lleva a pararse hasta nueva orden.
Aquí es donde tenemos que ver como optimizar su funcionamiento
el problema a optimizar
La tenemos programada para que salga 3 veces por semana:
lunes – miércoles – viernes, a las 10 am
si durante la limpieza se quedara atascada, al ser horario laboral, no siempre podemos estar pendiente de mirar la app de Mi Home (en la que se reciben las notificaciones de los dispositivos), así que a veces al llegar a casa nos damos cuenta de que se ha quedado varada, a media limpieza en alguna parte de casa.
Como en la mayoría de casos, el atasco desaparece al decirle que lo vuelva a intentar, se me ocurrió la simple idea de encargarle a openHAB la tarea de retomar la limpieza en caso de atasco.
la solución: openHAB
Así que fácil: hay que ver de que manera openHAB puede determinar que se ha atascado, y enviar una orden de retomar la limpieza.
a traves del binding Xiaomi Mi IO Binding podemos configurar el siguiente item, el cual nos da el estado actual del aspirador:
Number statusErrorID "Error [%s]" <error> (gVac,gVacStat) {channel="miio:vacuum:XXXXXXXX:status#error_id" }
Ahora que solo tenemos que averiguar cuáles códigos de error son los que nos interesan. En mi caso 5 y 8, así que podemos configurar una rule que se encargue de todo:
rule "Resume cleaning"
when
Item statusErrorID received update
then
if (statusErrorID.state == 5 || statusErrorID.state == 8)
createTimer(now.plusSeconds(30)) [sendCommand(actionControl, "vacuum")]
end
Le tengo añadido, a demás, un pequeño delay para que le dé tiempo a respirar un poco antes de retomar, así nos aseguramos que ha cambiado de modo y no se genera un bucle demasiado rápido.
como optimizar su funcionamiento
(aun más)
algo que aun quisiera añadirle sería un máximo de reintentos, y que al llegar ese máximo, nos mandara por Telegram la imagen del mapa para poder saber donde se ha quedado atascada irremediablemente… a la lista de tareas pendientes!
un saludo!