Cambiar el firmware de SonOff RF-Bridge a Tasmota con Portisch, y manejar señales crudas (raw)

Dado las limitaciones y lo cerrado del firmware original, decidí cambiar el software del dispositivo SonOff RF-Bridge a ESPurna, y este último lo he estado usando por mucho tiempo (1 año aproximadamente), sin embargo empecé a tener algunas complicaciones que me convencieron de buscar otras soluciones para este aparato, los principales problemas que tuve fueron:

  • Limitación de 16 códigos de almacenamiento.
  • A pesar de omitir el uso del micro-controlador EFM8BB1, la imposibilidad de aumentar la cantidad de códigos de almacenamiento no justifica las modificaciones de hardware que se realizaron.
  • Al intentar crear códigos de forma manual estos quedaban corruptos y su funcionamiento era completamente incierto, había ocasiones en que funcionaban bien y en otras dejaban de funcionar y había que reiniciar el dispositivo.

Buscando posibles candidatos para este dispositivo, encontré que el firmware Tastmota es el candidato ideal para lo que buscaba. Ya que permite la captura y emisión de códigos en crudo, ¿que significa esto?, que no requiere que los código estén almacenados en el dispositivo, por lo que podríamos transformar el SonOff RF-Bridge en un verdadero puente de radiofrecuencia, enviado la señal digitalmente desde nuestro servidor y que el dispositivo SonOff RF-Bridge sólo se encargue de emitirla (y transformarla en una señal analógica).

1.- Preparando el dispositivo

Primero tuve que quitar los puentes que se agregaron al instalar ESPurna para el bypass del EFM8BB1 (más detalles en el post) y también restablecer la pista que había sido cortada en ese procedimiento.


2.- Conectar el dispositivo mediante un puente serial

Para traspasar el firmware binario a la memoria del micro-controlador utilizaremos un adaptador serial, se debe conectar los pines de comunicación tal como están en la imagen:



Conectar el adaptador serie puede parecer una tarea compleja pero realmente es muy fácil. Yo he optado por realizar la soldadura por la parte posterior, ya que me resultaba mucho mas sencillo.


Dado que el chip requiere un voltaje de 3.3v y mi adaptador funciona con TTL a 5v, es necesario conectar al regulador de voltaje de la parte trasera del adaptador ya que ahí .


3.- Sobre-escribir la memoria del micro controlador ESP8285 (Flashing)

Para este paso estoy usando un equipo con Mac con OSx High Sierra, dado que en mi caso poseo un adaptador a puerto serie (Ft232rl), al ser una interfaz antigua (con casi 60 años de existencia) es muy usada, así que existen variadas formas de escribir el firmware sobre la placa, por lo que para este ejemplo usaré la forma más "compleja", o sea a travez de la terminal, aunque si desean un método más sencillo pueden buscar una guía para actualizar el firmware mediante el IDE de Arduino.

3.1 Descargar el archivo binario desde los release de tasmota, el archivo a descargar es "tasmota.bin".


Descargar el código fuente de Tasmota desde github y descomprimir, más adelante utilizaremos un archivo de este proyecto.

3.2  Verificar que nuestro PC haya detectado correctamente el adaptador serial USB, le recomiendo que primero revise la siguiente guía, ya que indica todo lo básico para operar con micro-controladores, en ella encontrará las instrucciones para instalar drivers, herramientas como Homebrew, Python y sus respectivas dependencias, también podrá ver cómo realizar una prueba de conexión:

https://loqueseaqueaprenda.blogspot.com/2021/02/preparar-equipo-para-trabajar-con.html


Para continuar, utilice el siguiente comando para listar los dispositivos USB-Serial:

ls -l /dev/cu.*

Este comando listará todas las interfaces serie existentes en nuestro equipo.


En mi caso mi adaptador ha sido detectado como /dev/cu.usbserial-A9KFZXD5, pero el nombre de este puerto cambiará dependiendo de tu adaptador serial USB, debes usar obviamente el que te informa tu máquina.

Para continuar es necesario tener instalado esptool.py, si no lo tienen instalado pueden seguir el paso 1.1 de la guía de este enlace.

3.3 Conectarnos al Chip ESP8285

Para ello debemos mantener presionado el botón del Sonof RF Bridge, enchufar nuestro adaptador serial a un puerto USB y soltar el botón luego de un par de segundos (el dispositivo Sonoff no debería encender ningún LED).

Ejecutar el siguiente comando para verificar que tenemos comunicación con el micro controlador:

esptool.py flash_id

Esptool.py mostrará la información recibida del micro controlador


3.4 Borrar la memoria

Para borrar la memoria del micro controlador ejecutar el siguiente comando:

esptool.py --port /dev/cu.usbserial-A9KFZXD5 erase_flash

3.5 Escribir la imagen de Tasmota

Luego de borrar la memoria debemos desconectar el adaptador serie USB del puerto y volver a conectar manteniendo el botón del Sonoff RF Bridge presionado. Una vez hecho esto, ejecutamos el siguiente comando:

esptool.py --port /dev/cu.usbserial-A9KFZXD5 write_flash 0x00000 ./Documents/tasmota.bin


3.6 Desconectar el adaptador serial USB de nuestro equipo, y conectar el Sonoff RF Bridge a la alimentación.

Si todo ha salido bien, nuestro Sonoff RF Bridge debería encender el led de wifi en forma titilante (intermitente) y además debería levantar un punto de wifi.

4.- Conectar el dispositivo al Wifi

Luego de escribir la imagen de Tasmota sobre el micro-controlador, debemos reiniciar el aparato, desconectarlo de la energía y volverlo a conectar.

El dispositivo levantará una red Wifi llamada tasmota-xxxxx-xxx (las xxxx variará según el ID de cada dispositivo), conectarse a esta red e ingresar a la IP 192.168.4.1.


Al ingresar a la dirección IP del dispositivo, probablemente la primera pantalla que muestre sea la de configuración Wifi, aquí puede ingresar los datos de su red Wifi como nombre de la red: AP1 SSID y su contraseña AP1 Password.



Presione el botón Save para guardar los datos y se reiniciará el dispositivo.

En caso de que al ingresar a la dirección IP su dispositivo este inicie en la pantalla principal, puede configurar la red Wifi ingresando a "Configuration":


Ingresar a "Configure Wifi":


Agregar el "SSId" y "password" de tu red:


Presionar el botón "Save" y esperar que el dispositivo reinicie.

El siguiente paso requiere tener acceso a su Endpoint Wifi para poder visualizar los aparatos conectados  a su red y saber cual es la dirección IP que se le ha otorgado al dispositivo con Tasmota.


Ahora que ya conocemos su dirección IP, podemos ir hacia ella y completar la configuración.

Importante: Si ya logra ver su dispositivo funcionando con Tasmota, puede des-soldar el adaptador serie ya que no será necesario a futuro.

4.1 Establecer una dirección IP fija

Siempre es recomendable manejar un dirección IP fija en el dispositivo, de esta forma evitamos tener que buscar en el endpoint Wifi cada vez que necesitemos entrar para hacer algún cambio.

Tasmota permite establecer un dirección IP fija ingresando un comando en su consola de configuración, acá un ejemplo que yo he usado para configurar mi dispositivo, establezca los datos que se acomoden a su entorno de red:

Para llegar a la consola ingrese a "Console" en el menú principal:


Ejemplo de mi consola de Tasmota al ingresar los comandos para establecer la dirección IP fija.


Comandos:

Ejecute el siguiente comando para ingresar una dirección IP para el dispositivo:

IPAddress1 192.168.1.13

Ejecute el siguiente comando para ingresar la puerta de enlace de su red:

IPAddress2 192.168.1.1

Ejecute el siguiente comando para ingresar la mascara de subred:

IPAddress3 255.255.255.0

Ejecute el siguiente comando para reiniciar el dispositivo:

restart 1

Luego de reiniciar el dispositivo ya podemos ingresar a la nueva IP establecida:


5.- Configurar el módulo para Sonoff Rf-Bridge

Ingresar a "Configure Module":


Seleccionar la opción "Sonoff Bridge (25)":


Presionar el botón "Save" y esperar que el dispositivo reinicie.

6.- Configurar identificación para el dispositivo

Para facilitar la identificación del dispositivo hay dos secciones que ayudan a encontrarlo en la red, la primera se encuentra en la sección de configuración Wifi, cambie el Hostname y presiones el botón "Save".


Y la segunda opción es ir a "Configuration" => "Configure Other":

Defina un nombre en la sección Device Name:


Finalmente presione "Save" para guardar y reiniciar el dispositivo.

7.- Instalar el firmware Portisch

7.1 Para instalar este firmware es necesario agregar dos puentes temporales dentro de la placa, estos puentes van a depender del modelo de la placa:

Para R1: Connect GPIO4 to C2Ck y GPIO5 to C2D.

Para R2: Connect GPIO4 to C2D y GPIO5 to C2Ck. (El texto en la serigrafía del PCB R2 está cambiado. Por lo tanto, este es el mismo cableado que en el R1).



7.2 Coloque el interruptor de ON / OFF de la placa en "OFF".

7.3 Energizar el dispositivo SonOff RF-Bridge y acceder a su sitio web de configuración desde el navegador.

7.4 Instalar el firmware, para ello debe ir a la opción de actualización "Firmware Upgrade":


Abra el cuadro de diálogo para seleccionar el archivo en la opción "Upgrade by file upload":


Seleccione el siguiente archivo que se encuentra en el repositorio que habíamos descargado desde Github al inicio:

el archivo es RF-Bridge-EFM8BB1-20190220.hex y se encuentra en la ruta: "Tasmota-master" => "tools" => "fw_SonoffRfBridge_efm8bb1".


Presione el botón "Start upgrade". Luego de estos pasos el dispositivo se reiniciará.

8.- Recibir y emitir señales RF-433 crudas 

Para probar que disponemos de las mejoras en este dispositivo, debemos ir a la consola de Tasmota e ingresar el siguiente comando:

rfraw 177


Esto hará que el dispositivo se ponga en modo escucha y permitirá obtener la data digital del código de radio frecuencia, para esto obviamente necesitamos poseer un emisor de radiofrecuencia, en mi caso dispongo de un típico control remoto de 4 botones usados para abrir portones eléctricos. Al presionar los botones del control remoto veremos la data que interpreta el micro-controlador.


Lo ideal es mantener presionado el mismo botón por varios segundos, notaremos que aveces la data tiene pequeñas variaciones, esto es normal, ya que es común que existan interferencias (principalmente redes inalámbricas) que alteran los datos, por lo que debemos usar la data que es más constante en nuestra captura.

9.- Emitir señales de radio-frecuencia

Para emitir señales de radio frecuencia lo primero que debemos hacer es transformar la data en un dato B0 válido, para ello debemos descargar el proyecto original de Portisch y correr el script de python3 que se encuentra en el proyecto: 

Para poder ejecutar este script se deben tener algunas dependencias instaladas en el equipo (Python3, Pip,  pycurl y Pillow).

En OsX para instalar estas dependencias primero es necesario disponer de Homebrew, pueden instalarlo siguiendo esta guía.

Luego de eso es necesario instalar Python3, Pip y las demás dependencias, usa los siguientes comandos:

brew install python3

en caso de no funcionar el comando anterior usar:

brew install --build-from-source python@3.9

Instalar Pip:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

Instalar pycurl:

brew reinstall openssl
pip uninstall pycurl
pip install --install-option="--with-openssl" --install-option="--openssl-dir=/usr/local/opt/openssl" pycurl

Instalar Pillow:

pip install Pillow

Ahora que ya tenemos Python3 y las dependencias podemos ejecutar el script

El archivo a ejecutar se llama "BitBucketConverter.py" y debemos ejecutarlo de la siguiente forma:

python3 BitBucketConverter.py

Este script nos solicitará como entrada la data capturada, y luego nos devolverá nuestra data convertida al formato B0, la cual estará lista para poder ser emitida en nuestro sonOff RF-Bridge.

Pegamos la data que hemos capturado, la que comienza con AA B1...

Nos responderá la data convertida AA B0...

Ahora nos vamos a la consola de Tasmota para realizar una prueba

El comando que debemos usar para que el SonOff emita una réplica de la señal rf capturada es:

RfRaw <data B0>; RfRaw 0;

Ejemplo:

Si todo ha salido bien nuestro dispositivo SonOff RF-Bridge debería emitir correctamente una señal de RF.

10.- Invocar una llamada tipo GET http request

Ahora solo nos queda darle un uso a este puente de radio frecuencia y para ello podemos realizarlo mediante MQTT o HTTP, en mi caso prefiero usar una llamada http, ya que de esta forma no necesito mantener corriendo un servicio de mensajes MQTT, y puedo abrir la conexión cada vez que lo requiera.

La forma más sencilla es pegarle directamente a la IP de nuestro SonOff RF-Bridge y enviarle como parámetro el comando que queremos que Tasmota ejecute, de la siguiente manera:

<IP-SonOff>/cm?cmnd=Backlog RfRaw <data B0>; RfRaw 0;

Ejemplo: Invocar la llamada desde la url del navegador

Con Tasmota mi proyecto de demótica ha escalado enormemente, he agregado 6 switch nuevos, por lo que dispongo de un total de 14 switch de rf433 (manejando 28 códigos de RF en total por el momento). Quitando el límite de 16 códigos que trae el dispositivo y sin necesidad de adquirir un segundo RF-Bridge, por lo que el cambio de firmware a Tasmota con Portisch ha sido todo un éxito.

Comentarios