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:
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
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
Agregar el "SSId" y "password" de tu red:
Presionar el botón "Save" y esperar que el dispositivo reinicie.
IPAddress1 192.168.1.13
IPAddress2 192.168.1.1
5.- Configurar el módulo para Sonoff Rf-Bridge
Seleccionar la opción "Sonoff Bridge (25)":
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".
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.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
Comentarios
Publicar un comentario