Esta creo que por fin será la última entrada en una serie que se ha prolongado muchísimo más de lo que esperaba. En esta hablaré de los últimos comandos que quedan por analizar.
En primer lugar está el comando 143. Este comando es el que se emite cuando se pulsa una especie de diana que hay en la parte superior derecha de la app oficial, y hace que el robot emita un pitido. En el manual no dice para qué sirve, por lo que lo único que se me ocurre es para localizarlo cuando no sabes donde anda. Sin embargo lo veo poco útil, pues si está en marcha lo escucharás perfectamente, y si está en pausa, al cabo de un minuto más o menos se apagará y dejará de responder a los comandos enviados por WiFi.
Por otro lado, ya he descubierto para qué sirve el comando 400, y no es para indicar que se ha abierto la app. Resulta que, al contrario de lo que pensaba, es la propia aspiradora la que recuerda las tareas cuando la programamos para que aspire tal día a la semana a tal hora. Así, si por ejemplo tenemos dos tareas programadas, una para que limpie de lunes a viernes a las 19:00 horas, y otra para que limpie sábados y domingos a las 16:30 horas, cuando emitimos el comando 400 nos devolverá esto:
{ "version":"1.0", "control":{ "targetId":"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", "targetType":"3", "broadcast":"0" }, "value":{ "transitCmd":"401", "maxRecord":"15", "result":"0", "orders":[ { "sign":"1", "orderIds":"1,2,3,4,5", "valid":"1", "hour":"19", "minute":"0", "mode":"11", "fan":"1", "waterTank":"255" },{ "sign":"2", "orderIds":"0,6", "valid":"1", "hour":"16", "minute":"30", "mode":"11", "fan":"2", "waterTank":"255" } ] } }
En orders es donde viene toda la información clave: es una lista con tantos diccionarios como programaciones haya. En ellos, el campo sign es el identificador de cada programa. En orderIds vienen los días de la semana en los que se activará, siendo 0 el domingo, 1 el lunes, etc. El campo valid vale 1 si el programa está activo, y 0 si está desactivado. Los campos hour y minute especifican, como cabe suponer, la hora a la que se quiere que comience. Por último, los campos mode, fan y watertank indican el modo de limpieza, la potencia del ventilador y el modo de fregado que se quieren utilizar para ese programa concreto.
El siguiente comando importante es el 402, que permite añadir un nuevo programa a la lista o modificar uno ya existente. El formato es el siguiente:
{ "cmd":0, "control":{ "authCode":"xxxxxx", "deviceIp":"192.168.3.56", "devicePort":"8888", "targetId":"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", "targetType":"3" }, "seq":0, "value": { "orders":[ { "fan":"3", "hour":"19", "minute":"30", "mode":"11", "orderIds":"2,0,6,5,4,3,1", "sign":"1", "valid":"1", "waterTank":"255" } ], "transitCmd":"402" } }\n
Vemos que en el campo orders van los valores del programa que queremos añadir o modificar (lo que se sabe gracias al campo sign.
Por último, el comando 404 permite borrar un programa. Su formato es el siguiente:
{ "cmd":0, "control":{ "authCode":"xxxxxx", "deviceIp":"192.168.3.56", "devicePort":"8888", "targetId":"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", "targetType":"3" }, "seq":0, "value":{ "orderIds":"3,6", "signs":"2", "transitCmd":"404" } }\n
El formato es aún más sencillo: junto con el comando y el campo signs, que indica qué programa se quiere borrar, se incluye el campo orderIds con los días del programa a borrar. Este campo tiene que coincidir con lo que contenga en ese momento el campo del mismo nombre del programa a borrar. No he probado qué ocurre si contiene menos o más valores.
Un ultimo detalle curioso es que hace un par de días actualicé el firmware de la WiFi, y curiosamente el contenido del tercer entero de las cabeceras enviadas por el servidor cambió de 0x01090000 a 0x01F20000. Lo mismo para el PONG de respuesta a un PING, que pasó de 0x01080001 a 0x01F10001. Sin embargo, si utilizamos los valores viejos todo sigue funcionando exactamente igual, lo que es curioso.