Xiaomi Mi Robot: como optimizar su funcionamiento

Compartelo con otros!

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!

Xiaomi Mi Robot Vacuum - 1st gen
Xiaomi Mi Robot Vacuum – 1st gen

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!

Deja un comentario