Hack Xiaomi Yi Action Camera

Seguro que mas de uno de vosotros a pensado en sacarle mas provecho a esta pequeña maravilla de cámara de Xiaomi, que podemos conseguir por poco mas de 50€. Pues bien en este articulo vamos a ver como comunicarnos con ella, los commandos básicos y el protocolo de comunicación.

 

Aunque nuestros amigos de Xiaomi, se han puesto las pilas y hay publicado un API y el SDK para poder desarrollar nuestras propias aplicaciones, la lastima es que este solo es compatible con la Xiaomi Yi 4k Action Camera. Así que nos toca hacer un poco de investigación, empecemos.

Lo primero que haremos sera encender la cámara y activar la wifi de esta, como ya sabeis esta camara crea una wifi propia. Con nuestro ordenador nos contectaremos a dicha wifi, por lo normal empieza por YDXJ ……

Y la contraseña por defecto 1234567890

 

Ahora que estamos conectados podemos enviarle commandos a la cámara con un cliente de telnet, si no tenéis uno podéis usar putty es muy sencillo de utilizar. Solo tenéis que indicar la ip de la cámara que por defecto es 192.168.42.1 el puerto 7878 y el tipo de conexión “Telnet”.

Llegamos a la parte interesante donde comenzaremos a enviar commandos a la cámara y también veremos las respuestas que nos devuelve. Queda decir que aunque estamos conectados por telnet la cámara recibe y responde en formato JSON.

Pedir token

Para que la cámara acepte nuestros comandos primero de todo debemos solicitarle un token. Escribiendo en el telnet lo siguiente.

{"msg_id":257,"token":0}

msg_id : Indica el comando , en este caso solictar token

token: es el identificador del token, en este caso como de momento no tenemos ninguno ponemos cero.

La camara nos devolvera el siguiente mensaje

{"rval": 0, "msg_id": 257, "param": 1 }

rval: Si este valor es cero, indica que el comando se ha ejecutado correctamente, de lo contrario es que hay algún error.

msg_id: indica que la respuesta es al comando 257, vamos el que le hemos enviado.

param: Es el valor devuelto del comando, en nuestro caso es el token, es decir para los siguientes comandos que enviemos a la cámara deberemos indicar que el toquen es uno o el valor que os devuelve a vosotros.

 

Hacer una foto.

Bien ahora que ya tenemos nuestro token, vamos a pedirle a la cámara que haga una foto, con el siguiente comando.

{"msg_id":769,"token":1}

Tened en cuenta que el valor de token, tiene que ser el que obtuvimos en el comando anterior. La cámara nos devolverá los siguientes mensajes:

Si ha podido ejecutar el comando sin errores :

{"rval":0,"msg_id":769}

Como antes si el comando es correcto, en rval tendremos un cero. Algunos códigos de error por ejemplo:

  • -4 : El token que hemos utilizado en el comando es erróneo.
  • -27: No esta disponible la tarjeta SD.

Aparte del anterior mensaje la cámara nos enviara varios mensajes, con los que podremos trazar como ha ido el proceso.

{"msg_id": 7, "type": "start_photo_capture" ,"param":"precise quality;off"}
{"msg_id": 7, "type": "precise_capture_data_ready" }
{"msg_id": 7, "type": "photo_taken" ,"param":"/tmp/fuse_d/DCIM/100MEDIA/YDXJ0043.jpg"}
  • msg_id  7 : Actualizaciónes del estado de la cámara, mas adelante veremos que recibiremos diferentes mensajes con este id.
  • type: Nos indica que estado ha cambiado o que ha sucedido:
  •  start_photo_capture : Inicio de la captura de la imagen.
  • precise_capture_data_ready: Ha terminado la captura de la imagen.
  • photo_taken: Ha grabado la imagen en la tarjeta SD,  en el atributo “param” tendremos la ruta del archivo.

 

Grabando vídeo

Para darle la orden de grabar video, necesitaremos dos comandos uno para iniciar la grabación y otro para pararla.

Comando para iniciar la grabación:

{"msg_id":513,"token":1}

Respuesta de la cámara:

{"rval":0,"msg_id":513}
{"msg_id": 7, "type": "start_video_record" }

La primera respuesta como en todos los comandos nos indica que este ha ido bien, el segundo mensaje nos envía una actualización del estado de la cámara, indicando que esta a comenzando a grabar vídeo.

Comando para parar la grabación

{"msg_id":514,"token":1}

Respuesta de la cámara

{"rval":0,"msg_id":514}
{"msg_id": 7, "type": "video_record_complete" ,"param":"/tmp/fuse_d/DCIM/100MEDIA/YDXJ0048.mp4"}

En el mensaje de respuesta el parámetro “type” nos actualiza el estado de que la cámara a terminado de grabar y en “param” nos indica donde a guardado el vídeo.

Conclusión

Estos son algunos comandos que admite esta maravilla de cámara, que nos permitirá integrarla en nuestros proyectos, en los próximos artículos veremos más comandos.

Deja un comentario

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