{"id":2655,"date":"2020-08-31T21:52:54","date_gmt":"2020-08-31T21:52:54","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=2655"},"modified":"2020-10-21T12:12:59","modified_gmt":"2020-10-21T12:12:59","slug":"a-ritmo-de-conga-14","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=2655","title":{"rendered":"A ritmo de conga (14)"},"content":{"rendered":"\n<p>Esta creo que por fin ser\u00e1 la \u00faltima entrada en una serie que se ha prolongado much\u00edsimo m\u00e1s de lo que esperaba. En esta hablar\u00e9 de los \u00faltimos comandos que quedan por analizar.<\/p>\n\n\n\n<p>En primer lugar est\u00e1 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 <em>app<\/em> oficial, y hace que el robot emita un pitido. En el manual no dice para qu\u00e9 sirve, por lo que lo \u00fanico que se me ocurre es para localizarlo cuando no sabes donde anda. Sin embargo lo veo poco \u00fatil, pues si est\u00e1 en marcha lo escuchar\u00e1s perfectamente, y si est\u00e1 en pausa, al cabo de un minuto m\u00e1s o menos se apagar\u00e1 y dejar\u00e1 de responder a los comandos enviados por WiFi.<\/p>\n\n\n\n<p>Por otro lado, ya he descubierto para qu\u00e9 sirve el comando 400, y no es para indicar que se ha abierto la <em>app<\/em>. 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\u00eda a la semana a tal hora. As\u00ed, 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\u00e1bados y domingos a las 16:30 horas, cuando emitimos el comando 400 nos devolver\u00e1 esto:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted mycode\">{\n  \"version\":\"1.0\",\n  \"control\":{\n    \"targetId\":\"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\",\n    \"targetType\":\"3\",\n    \"broadcast\":\"0\"\n  },\n  \"value\":{\n    \"transitCmd\":\"401\",\n    \"maxRecord\":\"15\",\n    \"result\":\"0\",\n    \"orders\":[\n      {\n        \"sign\":\"1\",\n        \"orderIds\":\"1,2,3,4,5\",\n        \"valid\":\"1\",\n        \"hour\":\"19\",\n        \"minute\":\"0\",\n        \"mode\":\"11\",\n        \"fan\":\"1\",\n        \"waterTank\":\"255\"\n      },{\n        \"sign\":\"2\",\n        \"orderIds\":\"0,6\",\n        \"valid\":\"1\",\n        \"hour\":\"16\",\n        \"minute\":\"30\",\n        \"mode\":\"11\",\n        \"fan\":\"2\",\n        \"waterTank\":\"255\"\n      }\n    ]\n  }\n}<\/pre>\n\n\n\n<p>En <em>orders<\/em> es donde viene toda la informaci\u00f3n clave: es una lista con tantos diccionarios como programaciones haya. En ellos, el campo <em>sign<\/em> es el identificador de cada programa. En <em>orderIds<\/em> vienen los d\u00edas de la semana en los que se activar\u00e1, siendo 0 el domingo, 1 el lunes, etc. El campo <em>valid<\/em> vale 1 si el programa est\u00e1 activo, y 0 si est\u00e1 desactivado. Los campos <em>hour<\/em> y <em>minute<\/em> especifican, como cabe suponer, la hora a la que se quiere que comience. Por \u00faltimo, los campos <em>mode, fan<\/em> y <em>watertank<\/em> indican el modo de limpieza, la potencia del ventilador y el modo de fregado que se quieren utilizar para ese programa concreto.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter meme\"><video height=\"180\" style=\"aspect-ratio: 320 \/ 180;\" width=\"320\" controls src=\"https:\/\/blog.rastersoft.com\/wp-content\/uploads\/2020\/07\/mando.mp4\"><\/video><\/figure>\n\n\n\n<p>El siguiente comando importante es el 402, que permite a\u00f1adir un nuevo programa a la lista o modificar uno ya existente. El formato es el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted mycode\">{\n  \"cmd\":0,\n  \"control\":{\n    \"authCode\":\"xxxxxx\",\n    \"deviceIp\":\"192.168.3.56\",\n    \"devicePort\":\"8888\",\n    \"targetId\":\"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\",\n    \"targetType\":\"3\"\n  },\n  \"seq\":0,\n  \"value\": {\n    \"orders\":[\n      {\n        \"fan\":\"3\",\n        \"hour\":\"19\",\n        \"minute\":\"30\",\n        \"mode\":\"11\",\n        \"orderIds\":\"2,0,6,5,4,3,1\",\n        \"sign\":\"1\",\n        \"valid\":\"1\",\n        \"waterTank\":\"255\"\n      }\n    ],\n    \"transitCmd\":\"402\"\n  }\n}\\n<\/pre>\n\n\n\n<p>Vemos que en el campo <em>orders<\/em> van los valores del programa que queremos a\u00f1adir o modificar (lo que se sabe gracias al campo <em>sign<\/em>.<\/p>\n\n\n\n<p>Por \u00faltimo, el comando 404 permite borrar un programa. Su formato es el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted mycode\">{\n  \"cmd\":0,\n  \"control\":{\n    \"authCode\":\"xxxxxx\",\n    \"deviceIp\":\"192.168.3.56\",\n    \"devicePort\":\"8888\",\n    \"targetId\":\"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\",\n    \"targetType\":\"3\"\n  },\n  \"seq\":0,\n  \"value\":{\n    \"orderIds\":\"3,6\",\n    \"signs\":\"2\",\n    \"transitCmd\":\"404\"\n  }\n}\\n<\/pre>\n\n\n\n<p>El formato es a\u00fan m\u00e1s sencillo: junto con el comando y el campo <em>signs<\/em>, que indica qu\u00e9 programa se quiere borrar, se incluye el campo <em>orderIds<\/em> con los d\u00edas 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\u00e9 ocurre si contiene menos o m\u00e1s valores.<\/p>\n\n\n\n<p>Un ultimo detalle curioso es que hace un par de d\u00edas actualic\u00e9 el firmware de la WiFi, y curiosamente el contenido del tercer entero de las cabeceras enviadas por el servidor cambi\u00f3 de 0x01090000 a 0x01F20000. Lo mismo para el  PONG de respuesta a un PING, que pas\u00f3 de 0x01080001 a 0x01F10001. Sin embargo, si utilizamos los valores viejos todo sigue funcionando exactamente igual, lo que es curioso.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta creo que por fin ser\u00e1 la \u00faltima entrada en una serie que se ha prolongado much\u00edsimo m\u00e1s de lo que esperaba. En esta hablar\u00e9 de los \u00faltimos comandos que quedan por analizar. En primer lugar est\u00e1 el comando 143. Este comando es el que se emite cuando se pulsa una especie de diana que &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=2655\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">A ritmo de conga (14)<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,7],"tags":[],"class_list":["post-2655","post","type-post","status-publish","format-standard","hentry","category-opendonita","category-tutoriales"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2655","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2655"}],"version-history":[{"count":5,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2655\/revisions"}],"predecessor-version":[{"id":2664,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/2655\/revisions\/2664"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2655"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2655"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2655"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}