{"id":4313,"date":"2019-12-22T09:57:13","date_gmt":"2019-12-22T08:57:13","guid":{"rendered":"http:\/\/bitacora.eniac2000.com\/?p=4313"},"modified":"2019-12-22T09:57:13","modified_gmt":"2019-12-22T08:57:13","slug":"instalacion-manual-del-firmware-tasmota-en-dispositivos-sonoff-mini","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=4313","title":{"rendered":"Instalaci\u00f3n manual del firmware Tasmota en dispositivos Sonoff Mini"},"content":{"rendered":"<p><strong>Editado: Esta versi\u00f3n del art\u00edculo se ha quedado obsoleta. En los comentarios se encuentra un enlace a la nueva versi\u00f3n del mismo.<\/strong><\/p>\n<p>Gran parte de la dom\u00f3tica que tengo instalada en casa est\u00e1 basada en dispositivos <a href=\"https:\/\/sonoff.tech\/\" target=\"_blank\">Sonoff<\/a>. Empezando por el Sonoff Basic, y siguiendo con interruptores de pared y sistemas duales, estos aparatos me han proporcionado una gran versatilidad para controlar de manera remota diversos elementos que tengo por casa. Al principio realizaba estos despliegues con montajes basados en NodeMCU y rel\u00e9s convencionales, pero la falta de un buen empaquetamiento de estas soluciones <em>ad-hoc<\/em> generaba algunos problemas de seguridad en casa. As\u00ed que cuando tuve conocimiento de los Sonoff, y vi que desde el punto de vista econ\u00f3mico no hab\u00eda mucha diferencia con lo que gastaba en mis sistemas hechos a medida, decid\u00ed pasar a emplearlos en mis nuevos montajes.<\/p>\n<p>El principal problema con los Sonoff, sin embargo, es que no me hace mucha gracia utilizar una plataforma de terceros sobre la que no tengo el control. Por otro lado, con el firmware de casa enfocado al uso de esta plataforma propietaria, no ten\u00eda capacidad para integrarlos de manera adecuada en mi propia plataforma. Para solucionar este problema tuve la enorme suerte de conocer el firmware libre <a href=\"https:\/\/github.com\/arendst\/Tasmota\" target=\"_blank\">Tasmota<\/a>, que permite independizarse de manera completa de la plataforma propietaria del fabricante, e integrar el sistema con soluciones abiertas (como por ejemplo basadas en protocolo MQTT, que es la base de mi sistema dom\u00f3tico).<\/p>\n<p>Hasta ahora hab\u00eda estado enormemente contento con esta soluci\u00f3n, pero desde el principio esta soluci\u00f3n ten\u00eda un lunar: si bien los dispositivos Sonoff funcionaban excepcionalmente bien por s\u00ed solos, o controlados mediante el sistema de dom\u00f3tica, no hab\u00eda una soluci\u00f3n adecuada para integrarlos con interruptores de pared convencionales: dado que los Sonoff s\u00f3lo disponen de entrada y salida de fase (y si acaso de neutro), no presentan la tercera conexi\u00f3n que permite integrarlos en un sistema de llaves conmutadas. Y si bien es cierto que existe la <a href=\"https:\/\/sonoff.tech\/product\/wifi-smart-wall-swithes\/tx-series\" target=\"_blank\">serie TX de interruptores de pared<\/a>, \u00e9stos tampoco pueden usarse de manera conmutada, lo cual es un fastidio bastante importante para usarlos en habitaciones grandes, o en dormitorios.<\/p>\n<figure id=\"attachment_4314\" aria-describedby=\"caption-attachment-4314\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/12\/luces-conmutadas.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/12\/luces-conmutadas-400x251.jpg\" alt=\"Esquema de montaje de luces conmutadas\" title=\"Esquema de montaje de luces conmutadas\" width=\"400\" height=\"251\" class=\"size-medium wp-image-4314\" \/><\/a><figcaption id=\"caption-attachment-4314\" class=\"wp-caption-text\">Esquema de montaje de luces conmutadas<\/figcaption><\/figure>\n<p>Pues bien, la nueva serie <a href=\"https:\/\/sonoff.tech\/product\/wifi-diy-smart-switches\/sonoff-mini\" target=\"_blank\">Sonoff Mini<\/a> ha venido a solucionar este gran inconveniente. Este dispositivo dispone de dos entradas de control, de tal manera que se puede colocar cualquier interruptor convencional para interactuar con el dispositivo, incluyendo interruptores conmutados. Lo \u00fanico que hay que tener en cuenta (y desde mi punto de vista es una ventaja) es que estos interruptores pasan a formar un circuito separado, por los que no pasan ni fase ni neutro, y que lo \u00fanico que hacen es cerrar el circuito de control en el Sonoff. Mejor desde el punto de vista de la seguridad.<\/p>\n<figure id=\"attachment_4315\" aria-describedby=\"caption-attachment-4315\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/12\/sonoff-mini-punto-luce-deviato-1024x576.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/12\/sonoff-mini-punto-luce-deviato-1024x576-400x225.jpg\" alt=\"Esquema de montaje de un Sonoff Mini con interruptores conmutados\" title=\"Esquema de montaje de un Sonoff Mini con interruptores conmutados\" width=\"400\" height=\"225\" class=\"size-medium wp-image-4315\" \/><\/a><figcaption id=\"caption-attachment-4315\" class=\"wp-caption-text\">Esquema de montaje de un Sonoff Mini con interruptores conmutados<\/figcaption><\/figure>\n<p>La segunda caracter\u00edstica interesante es que los Sonoff Mini tienen un tama\u00f1o bastante reducido, que en teor\u00eda permitir\u00eda colocarlos dentro del mismo hueco donde tengamos nuestro interruptor. Y digo <em>en teor\u00eda<\/em> porque, si bien es cierto que por ancho y alto entrar\u00edan perfectamente (miden 42.6&#215;46.6mm), el problema viene por la profundidad de 20mm, que me temo que en la mayor\u00eda de los casos basta para imposibilitar colocarlos detr\u00e1s del enchufe. En cualquier caso, no es un gran problema: siempre se pueden colocar dentro de la caja de registro de la habitaci\u00f3n, y a correr.<\/p>\n<p>Dicho todo esto, no pod\u00eda menos que hacerme con algunos de ellos para probarlos. Y en efecto, son una peque\u00f1a maravilla. El problema, en mi caso, vino a la hora de cambiarles el firmware de f\u00e1brica por el Tasmota. Por lo general con los Sonoff no es demasiado complicado: soldar los pines para conectar un conversor serie-TTL en los conectores que los dispositivos traen de f\u00e1brica, y cargar el firmware desde el IDE Arduino. La dificultad con el Mini es que todo es mucho m\u00e1s reducido, por lo que la ubicaci\u00f3n de estos conectores en muy poco conveniente, encima el fabricante ha dejado soldados estos conectores, lo que fastidia bastante a la hora de querer usarlos (y encima luego tienes que desoldar lo que sea que conectes, porque si no, la caja del dispositivo no cierra):<\/p>\n<figure id=\"attachment_4316\" aria-describedby=\"caption-attachment-4316\" style=\"width: 394px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/12\/IMG_20191222_090229_1_3.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/12\/IMG_20191222_090229_1_3-394x400.jpg\" alt=\"Conectores 3.3V, GND, RX y TX en el Sonoff Mini\" title=\"Conectores 3.3V, GND, RX y TX en el Sonoff Mini\" width=\"394\" height=\"400\" class=\"size-medium wp-image-4316\" \/><\/a><figcaption id=\"caption-attachment-4316\" class=\"wp-caption-text\">Conectores 3.3V, GND, RX y TX en el Sonoff Mini<\/figcaption><\/figure>\n<p>En teor\u00eda, esto no tendr\u00eda que ser necesario, ya que el fabricante proporciona unas instrucciones y una aplicaci\u00f3n espec\u00edfica para cargar firmware personalizado mediante una actualizaci\u00f3n OTA (y que el mismo fabricante publicita, indicando que estos dispositivos son DIY): supuestamente es cuesti\u00f3n de descargar dicho software, conectar un jumper (que viene con el mismo Sonoff) para entrar en modo DIY, levantar la WiFi de programaci\u00f3n que el dispositivo espera encontrar, y cargar el firmware que queramos. Pero en la pr\u00e1ctica no he parado de encontrarme inconvenientes: el software del fabricante s\u00f3lo funciona en Windows (que, para colmo, lo marca como <a href=\"https:\/\/github.com\/itead\/Sonoff_Devices_DIY_Tools\/issues\/36\" target=\"_blank\">posible software malicioso<\/a>), la mitad de las veces el software es incapaz de detectar de manera correcta el Sonoff Mini, y para colmo, a la hora de realizar el cambio de firmware, el software trata de hacer una conexi\u00f3n a un servidor del fabricante para notificar que est\u00e1s cambiando el firmware, y paraliza la actualizaci\u00f3n si no es capaz de conectar con dicho servidor (ver <a href=\"https:\/\/www.reddit.com\/r\/homeassistant\/comments\/di4mrk\/guide_howto_flash_the_sonoff_mini_with_tasmota\/\" target=\"_blank\">punto 17 del este enlace<\/a>).<\/p>\n<p>As\u00ed que tras una ma\u00f1ana enormemente improductiva tratando de reemplazar el firmware, volv\u00ed al buen y viejo sistema manual, si bien a\u00fan On The Air. Este modo manual es el que desde Tasmota se recomienda para dispositivos Mac, pero he podido comprobar que funciona perfectamente para sistemas Linux. El recetario es el siguiente:<\/p>\n<ul>\n<li><strong>Preparar un peque\u00f1o servidor web donde alojar el binario a cargar:<\/strong> Para esto vale cualquier dispositivo que tengas por casa, y que luego puedas conectar a la WiFi de programaci\u00f3n OTA que el Sonoff espera encontrar. Una Raspberry Pi es ideal, y un Apache2 es perfecto. Aqu\u00ed es conveniente no pasarse de listo y querer montar un <a href=\"https:\/\/nmap.org\/ncat\/guide\/ncat-tricks.html\" target=\"_blank\">servidor web m\u00ednimo con NCAT<\/a>, ya que a la hora de descargar el firmware el Sonoff Mini compone una URL con par\u00e1metros, y NCAT no es capaz de procesarlo adecuadamente. Lo dicho, mejor con Apache. El firmware a descargar habr\u00e1 de ser inferior a 500Kb, y el precompilado <a href=\"http:\/\/thehackbox.org\/tasmota\/tasmota-wifiman.bin\" target=\"_blank\">tasmota-wifiman.bin<\/a> es perfecto para ello. Por \u00faltimo, habr\u00e1 que obtener la SHAsum del fichero (en adelante, &lt;SHAsum&gt;):<br \/>\n<code>$ shasum -a 256 tasmota-wifiman.bin<\/code>\n<\/li>\n<li><strong>Levantar una red WiFi con los siguientes par\u00e1metros:<\/strong> SSID: sonoffDiy;  Password: 20170618sn . Una vez levantada, se ha de conectar el servidor web anterior a dicha red WiFi. Anotar su IP como &lt;werserver&gt;<\/li>\n<li><strong>Poner el Sonoff Mini en modo OTA:<\/strong> Hay que abrir el Sonoff y conectar el jumper para pasarlo al modo OTA. Cerrar y conectar fase y neutro (\u00a1ojo con no invertirlos!)\n<p><figure id=\"attachment_4317\" aria-describedby=\"caption-attachment-4317\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/12\/sonoff-mini-ota.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2019\/12\/sonoff-mini-ota-400x189.jpg\" alt=\"Colocaci\u00f3n del jumper para modo OTA\" title=\"Colocaci\u00f3n del jumper para modo OTA\" width=\"400\" height=\"189\" class=\"size-medium wp-image-4317\" \/><\/a><figcaption id=\"caption-attachment-4317\" class=\"wp-caption-text\">Colocaci\u00f3n del jumper para modo OTA<\/figcaption><\/figure><\/li>\n<li><strong>Obtener la IP del dispositivo<\/strong> (en adelante &lt;deviceIP&gt;): Bien mediante un escaneo de IPs, mirando en el dispositivo que levante la red, etc&#8230;<\/li>\n<li><strong>Obtener el identificador del dispositivo<\/strong> (en adelante &lt;deviceID&gt;): Con linux puede realizarse con el comando avahi-browse. Esto puede ejecutarse desde el mismo dispositivo donde se haya levantado el servidor web, o bien desde un tercer dispositivo.\n<p><code>En este ejemplo, el &lt;deviceID&gt; es 1000988699<\/p>\n<p>$ avahi-browse -t _ewelink._tcp --resolve<\/p>\n<p>+ wlp3s0 IPv4 eWeLink_1000988699 _ewelink._tcp local<br \/>\n= wlp3s0 IPv4 eWeLink_1000988699 _ewelink._tcp local hostname = [eWeLink_1000988699.local] address = [192.168.1.109] port = [8081] txt = [\"data1={\"switch\":\"off\",\"startup\":\"off\",\"pulse\":\"off\",\"pulseWidth\":500,\"rssi\":-47}\" \"seq=1\" \"apivers=1\" \"type=diy_plug\" \"id=1000988699\" \"txtvers=1\"]<\/code><\/li>\n<li>Verificar la conectividad con el Sonoff: Lanzar un POST a \/zeroconf\/info\n<p><code>$ curl http:\/\/&lt;deviceIP&gt;:8081\/zeroconf\/info -XPOST --data '{\"deviceid\":\"&lt;deviceID&gt;\",\"data\":{} }'<\/p>\n<p>{\"seq\":2,\"error\":0,\"data\":\"{\"switch\":\"off\",\"startup\":\"off\",\"pulse\":\"off\",\"pulseWidth\":500,\"ssid\":\"sonoffDiy\",\"otaUnlock\":false}\"}<br \/>\n<\/code><\/li>\n<li><strong>Desbloquear las actualizaciones OTA en caso de que est\u00e9n bloqueadas en el paso anterior):<\/strong><br \/>\n<code>$ curl http:\/\/&lt;deviceIP&gt;:8081\/zeroconf\/ota_unlock -XPOST --data '{\"deviceid\":\"&lt;deviceID&gt;\",\"data\":{} }'<\/p>\n<p>{\"seq\":2,\"error\":0}<\/code><\/li>\n<li><strong>Cargar el firmware tasmota desde el servidor web creado anteriormente:<\/strong>\n<p><code>$ curl http:\/\/&lt;deviceIP&gt;:8081\/zeroconf\/ota_flash -XPOST --data '{\"deviceid\":\"&lt;deviceID&gt;\",\"data\":{\"downloadUrl\": \"http:\/\/&lt;webServer&gt;\/tasmota-wifiman.bin\", \"sha256sum\": \"&lt;SHAsum&gt;\"} }'<\/p>\n<p>{\"seq\":2,\"error\":0}<\/code><\/li>\n<li><strong>Verificar en los logs del servidor web que el Sonoff est\u00e1 descargando adecuadamente el fichero:<\/strong> Deber\u00eda aparecer algo como lo siguiente repetido m\u00faltiples veces:<br \/>\n<code> 192.168.4x.xx - - [21\/Dec\/2019:12:52:33 +0100] \"GET \/tasmota-wifiman.bin?deviceid=xxxxxxxxxxx&ts=1481765933&sign=95300ceae2fb9cd19f09283e54169cfa7f998d38bf33463ad613e24e76098b20 HTTP\/1.1\" 206 4394 \"-\" \"itead-device\"<br \/>\n192.168.4x.xx - - [21\/Dec\/2019:12:52:33 +0100] \"GET \/tasmota-wifiman.bin?deviceid=xxxxxxxxxxx&ts=1085377743&sign=c96e52cf3e9b7680003df7f3d17a5d266de35d486bf25a62b03d6737a1cc6083 HTTP\/1.1\" 206 4397 \"-\" \"itead-device\"<\/code><\/li>\n<li>Esperar unos 30 segundos. El Sonoff deber\u00eda desconectarse de la red WiFi, y levantar una red con SSID <em>tasmota-xxxx<\/em>. Conectar a dicha red y configurar el dispositivo para conectar a tu red WiFi normal.<\/li>\n<li><strong>Configurar el firmware con los siguientes par\u00e1metros:<\/strong><br \/>\n<code>GPIO\tTasmota Component\tDevice Function<br \/>\n0\tButton1 (17)\tButton<br \/>\n4\tSwitch1 (9)\tS1\/S2<br \/>\n12\tRelay1 (21)\tL Out<br \/>\n13\tLED1 (56)\tLink\/Power Indicator<\/code><\/li>\n<\/ul>\n<p>\u00a1Y listos! Con esto el Sonoff Mini pasa a estar configurado como un nuevo dispositivo con firmware Tasmota. A continuaci\u00f3n he dejado un v\u00eddeo en el que se ve c\u00f3mo se puede interactuar con el Sonoff Mini, una vez ya configurado con el software Tasmota, y un interruptor f\u00edsico:<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/xSPi4WK5vM8\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/p>\n<p><strong>Editado:<\/strong><\/p>\n<p>Estas Navidades he estado haciendo algunas pruebas de campo con Sonoff Mini, ya con el firmware Tasmota, y han sido sumamente interesantes. El principal aspecto que he notado es que con el firmware <strong>tasmota-wifiman<\/strong>, en el caso de realizar m\u00faltiples encendidos y apagados consecutivos pueden perderse algunos de los encendidos y apagados. Para evitar este inconveniente, es recomendable hacer una actualizaci\u00f3n del firmware a una versi\u00f3n convencional. Para ello, se habr\u00e1n de realizar los siguientes pasos:<\/p>\n<ul>\n<li><strong>Realizar un \u00abReset 5\u00bb<\/strong> en la ventana de comandos del portal web que levanta el firmware Tasmota ANTES de intentar realizar cualquier actualizaci\u00f3n OTA del dispositivo. La funci\u00f3n de este comando es eliminar cualquier remantente del flasheo realizado para instalar el firmware Tasmota.<\/li>\n<li><strong>Actualizar v\u00eda OTA el firmware tasmota-wifiman a una versi\u00f3n espec\u00edfica para la variante Sonoff Mini.<\/strong> Esta actualizaci\u00f3n deber\u00e1 realizarse utilizando la opci\u00f3n \u00ablocal File upload OTA\u00bb. Est\u00e1 desaconsejado realizar la actualizaci\u00f3n mediante web OTA, dado el grave riesgo de dejar la unidad inoperativa. El otro requisito es que la versi\u00f3n del firmware ha de tener menos de 500 kB, por lo que se recomienda el uso de la variante <strong>tasmota-lite<\/strong> del r<a href=\"http:\/\/thehackbox.org\/tasmota\/\" target=\"_blank\">epositorio de firmare de Tasmota<\/a>. El binario escogido se descargar\u00e1 al PC local, y desde ah\u00ed se subir\u00e1 al Sonoff Mini v\u00eda OTA.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Editado: Esta versi\u00f3n del art\u00edculo se ha quedado obsoleta. En<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[117,543,1161,1567,1568,1595],"series":[],"class_list":["post-4313","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-apache2","tag-domotica","tag-ncat","tag-sonoff","tag-sonoff-mini","tag-tasmota"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4313","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4313"}],"version-history":[{"count":0,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/4313\/revisions"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4313"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4313"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4313"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=4313"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}