Hack Sonoff RF Bridge 433 (R1/R2), test du firmware OpenMQTTGateway • Domotique et objets connectés à faire soi-même

Je vous propose de débuter une petite série d’articles sur le hack du pont Sonoff RF Bridge 433 testé récemment. Comme tous les modules domotiques Sonoff, il est très facile d’installer un firmware Open Source alternatif pour connecter directement vos appareils à un serveur domotique DIY tel que Jeedom, Domoticz ou Home Assistant. Bien évidemment, cette opération va vous faire perdre la compatibilité avec l’application eWeLink pour iOS et Android ainsi que le support des assistants vocaux Amazon Alexa et Google Home.

Si vous utilisez un assistant vocal, il faudra gérer le depuis le serveur domotique. Je vous propose de commencer par le firmware OpenMQTTGateway (merci Migui pour l’info) initié par 1technophile. J’ai réalisé l’installation sur la version R2 de 2018 mais c’est exactement la même chose pour la première génération du boitier. Vous pouvez acheter le RF Bridge 433 sur Amazon pour environ 17€ ou directement en chine chez la plupart des marchands

Présentation (rapide) du firmware OpenMQTTGateway

OpenMQTTGateway a été développé pour fonctionner sur les MCU Arduino avec une carte Ethernet W5000, les cartes de développement ESP8266 et ESP32. Il supporte également les ESP8285 qui équipent la majorité des modules domotiques Itead Sonoff.

Il permet de décoder (et même de mimer) les commandes en provenance d’une grande variété de protocoles et de fréquences radio :

  • 433MHz du Sonoff RF Bridge 433
  • RFM69, fréquences 433/868/915Mhz à choisir en fonction de vos appareils domotiques (en de la législation en vigueur dans votre pays)
  • IR, récepteur Infra Rouge
  • BLE, permet la détection d’appareils Bluetooth (c’est ce qu’on appel le beacon ou ibeacon). Pratique pour déclencher un scénario lorsque vous arrivez ou partez de la maison
  • Xiaomi Mi Flora, présentée ici. Fonctionne en Bluetooth
  • 2G (GSM/GPRS)

C’est vraiment ce qui fait la force de ce firmware. Le RF Bridge devient un pont totalement transparent qui se “contente” de renvoyer les codes interceptés (ici en IR ou radio 433MHz). Sur un Arduino équipé d’une interface Ethernet W5000 ou un ESP8266/ESP32, on pourra ajouter le bluetooth et d’autres fréquences radio. Le nombre limite de 16 appareils disparait par la même occasion. Cette limite de 16 appareils est imposée par Sonoff, probablement pour limiter les ressources en serveurs.

On perd également la notion de jumelage (pairing). Inutile donc de chercher comment faire. A chaque fois qu’un code radio est décodé, il est transmis sous la forme de messages MQTT. Voici un exemple :

rfbridge433/OpenMQTTGateway/SRFBtoMQTT/Raw 1F4A00FA030C5BBEA2
rfbridge433/OpenMQTTGateway/SRFBtoMQTT 6012578
rfbridge433/OpenMQTTGateway/SRFBtoMQTT/Tsyn 8010
rfbridge433/OpenMQTTGateway/SRFBtoMQTT/Thigh 250
rfbridge433/OpenMQTTGateway/SRFBtoMQTT/Tlow 780

On dispose également d’une prise en charge des capteurs les plus courants (température, humidité, consommation d’énergie basse tension, pression atmosphérique, détection de mouvement, luminosité…). Un grand bravo à tous les développeurs du projet !

Source : https://github.com/1technophile/OpenMQTTGateway/wiki

Revert de la médaille, il n’y a aucun support natif des Topics permettant de s’interfacer avec un serveur domotique (Domoticz, Jeedom). Il faudra développer sa propre interface avec Node-RED par exemple. En contrepartie, on pourra piloter un nombre illimité d’appareils et créer des scénarios complexes.

Coté décodage radio, le circuit EFM8BB10F8G n’a pas été bi-passé. Certaines trames radio ne sont pas décodés. Impossible par exemple d’intercepteur une alarme depuis mon détecteur de fumée Chacon 34126 (LM-101LG) très bien pris en charge par RFLink. Il est possible d’installer un firmware alternatif sur le circuit EFM8BB10F8G de Silicon Labs pour ajouter le support des commandes 0xA0 to 0xA5. Un connecteur série est d’ailleurs disponible sur la carte à cet effet. Attention toutefois, il y a de grande chance que vous perdiez la compatibilité avec le firmware OpenMQTTGateway, voir ESPurna et Tasmota. Affaire à suivre…

Démonter le boitier Sonoff RF Bridge 433 R2

Le fond du boitier est fixé à l’aide de 4 vis cachées sous les patins en mousse. Après avoir dévissé les 4 vis, la carte électronique du RFBridge est directement accessible.

Je n’ai pas de boitier de première génération mais il ne semble pas y avoir de vis de fixation d’après les photos sur internet.

Souder le connecteur Série sur le RF Bridge 433 (R1 et R2)

Le connecteur série se situe en dessous du rétro-éclairage à LED vert qui illumine le logo Sonoff. L’éclairage à LED n’est pas collé, il faut juste déformer les pattes pour le soulever.

Retirez ensuite le petit intercalaire en mousse pour accéder aux pistes du connecteur UART.

Soudez ensuite un connecteur à 4 broches (ou 5 si vous voulez exposer la broche I2C SDA de l’ESP8266). Prenez le temps de préchauffer quelques secondes en plaçant la panne du fer à souder à la jonction entre la broche du connecteur et la piste du circuit. Le circuit “mouille” très peu. N’apportez pas trop d’étain au risque de venir souder deux broches ensemble 🙁

Si ça vous arrive, pas de panique, utilisez une pompe à dessouder et une tresse de cuivre pour nettoyer le circuit.

Commencez par retirer l’excédent d’étain avec la pompe à vide puis frottez le circuit avec la tresse de cuivre en vous aidant de la panne du fer à souder chauffée.

On arrive assez bien à récupérer les catastrophes 😉

Branchez le câble du convertisseur USB / Série (R1 et R2)

Vous pouvez utiliser n’importe quel convertisseur FTDI USB / Série. Ici j’ai utilisé un câble USBTTL232-3V Adafruit dont voici le repérage des broches. 

.

lpfxjfrbnwkosxb6mvpq-4825304

Comme d’habitude, il faut croiser les broches RX/TX. Si vous n’arrivez pas à téléverser le firmware, c’est la première chose à vérifier. Branchement coté convertisseur USB/UART.

Et sur le RF Bridge 433 (modèles R1 ou R2). De gauche à droite : 3V3, RX, TX, GND

Mettre le RFBridge 433 en mode programmation (bootload)

La procédure pour passer l’ESP8285 en mode programmation circule un peu partout sur GitHub. J’ai appliqué la procédure proposée par PeterEmbedded

  • Débrancher l’alimentation 5V
  • Mettre le commutateur S2 sur OFF
  • Maintenir le micro switch (pairing) durant 5s en mettant sous tension
  • Relâcher le bouton pairing

Je n’ai pas à disposition le boitier de première génération mais la procédure semble parfaitement identique d’après ce tutoriel d’installation du firmware Tasmota publié sur GitHub.

Pour les 2 versions du boitier, la LED verte reste allumée. Elle n’a pas de fonction, c’est juste un indicateur de mise sous tension.

Récupérer le firmware OpenMQTTGateway

Allez sur GitHub sur cette page pour télécharge le code source du projet.

Renommer le fichier ZIP en supprimant la partie (-master) puis décompressez ce dernier.

Ouvrez le fichier OpenMQTTGateway.ino qui se trouve à la racine du répertoire avec l’IDE Arduino.

Installer un broker MQTT (Mosquitto)

Open MQTT Gateway publie et souscrit les messages vers un serveur MQTT (aussi appelé Broker). Vous aurez besoin d’indiquer les paramètres de connexion dans le fichier de configuration :

  • Adresse IP du broker MQTT
  • Port du broker MQTT
  • Optionnel mais fortement conseillé, l’utilisateur et le mot de passe de connexion

Vous pouvez installer un broker sur un PC Windows ou Linux, un Mac et évidemment un Raspberry Pi.

Configurer le firmware OpenMQTTGateway pour le RF Bridge 433

Open MQTT Gateway est un projet générique qui s’adapte à différentes plateformes. Il faut donc modifier la configuration en fonction de la cible (le type de micro-contrôleur) et des éventuels capteurs ou actionneurs branchés sur ce dernier. Tout est modifiable depuis le fichier User_config.h

Broker MQTT

Dans la section MQTT Parameter definition, indiquez les paramètres du broker MQTT (utilisateur, mot de passe, IP, port). Laissez vide si aucune authentification n’est nécessaire (déconseillé).

//MQTT Parameters definition
//#define mqtt_server_name "www.mqtt_broker.com" // instead of defining the server by its IP you can define it by its name, uncomment this line and set the correct MQTT server host name
char mqtt_user[20] = "broker user name"; // not compulsory only if your broker needs authentication
char mqtt_pass[20] = "broker user password"; // not compulsory only if your broker needs authentication
char mqtt_server[40] = "ip broker";
char mqtt_port[6] = "1883";

Mode de connexion WiFi

Il est possible de configurer le connexion WiFi à l’aide d’un gestionnaire de connexion (nous verrons plus bas comment faire) ou fixer dans le code (en dur) les paramètres de connexion. Si vous débutez, je vous conseille la seconde option. Dé-commentez #define ESPWifiManualSetup et mettrez en commentaire #define WifiManager_password.

#define ESPWifiManualSetup true //uncomment you don't want to use wifimanager for your credential settings on ESP
//#define WifiManager_password "your_password"

Paramètres WiFi

Si vous optez pour l’option de configuration dans le code, indiquez le nom (ssid) et le mot de passe de réseau WiFi

#define wifi_ssid "xxxx"
#define wifi_password "xxxx"

Paramètre pour la mise à jour OTA (Over The Air)

Une fois que le firmware aura été installé, vous pourrez le mettre à jour en WiFi depuis l’IDE Arduino, c’est la mise à jour OTA, ou Over The Air en anglais. Pratique, vous pouvez installer la Gateway au plus près de vos équipements. Un fois redémarré, vous trouverez le pont dans la liste des ports.

Il est possible de spécifier dans la configuration le nom et le mot de passe qui sera demandé avant la mise à jour.

/*-------------DEFINE YOUR OTA PARAMETERS BELOW----------------*/
#define ota_hostname Gateway_Name
#define ota_password "OTAPASSWORD"
#define ota_port 8266

Pour en savoir plus et utiliser la librairie Arduino OTA dans vos projets, vous pouvez lire ce tutoriel qui explique en détail comment faire.

Type d’appareil

Dernier paramètre, le plus important en fait, on indique au firmware sur quel type d’appareil il va fonctionner. Dé-commentez la configuration ZgatewaySRFB et mettez en commentaire toutes les autres.

//#define ZgatewayRF          //ESP8266, Arduino, ESP32
//#define ZgatewayIR          //ESP8266, Arduino,         Sonoff RF Bridge
//#define ZgatewayBT          //ESP8266, Arduino, ESP32
//#define ZgatewayRF2       //ESP8266, Arduino, ESP32
#define ZgatewaySRFB      //                          Sonoff RF Bridge
//#define ZactuatorONOFF    //ESP8266, Arduino, ESP32,  Sonoff RF Bridge
//#define ZsensorINA226     //ESP8266, Arduino, ESP32
//#define ZsensorHCSR501    //ESP8266, Arduino, ESP32,  Sonoff RF Bridge
//#define ZsensorADC        //ESP8266, Arduino, ESP32
//#define ZsensorBH1750     //ESP8266, Arduino, ESP32
//#define ZsensorTSL2561    //ESP8266, Arduino, ESP32
//#define ZsensorBME280     //ESP8266, Arduino, ESP32
//#define ZsensorDHT        //ESP8266, Arduino, ESP32,  Sonoff RF Bridge
//#define ZgatewayRFM69     //ESP8266, Arduino, ESP32

Comme vous pouvez le voir, il est possible d’ajouter des accessoires au RF Bridge 433 :

  • Une sonde de température DHT. Le firmware supporte les DHT11, DHT21 et DHT22. Il faut indiquer manuellement le type de capteur dans le fichier config_DHT.h
  • Un bouton ON/OFF
  • Un récepteur infra-rouge, génial pour prendre en détourner un bouton de la télécommande de la télé et piloter un éclairage à LED depuis son canapé
  • Un détecteur de mouvement PIR HCSR501 qui transformera la gateway en point de surveillance pour un système d’alarme d’appoint pas cher !

Installer le support des cartes ESP8266 sur l’IE Arduino

Si vous n’avez jamais programmé les cartes ESP8266, vous devez commencer par installer les librairies nécessaires sur l’IDE Arduino. Sur macOS, allez dans le menu Arduino puis Préférences… Cliquez sur l’icône indiquée par la flèche rouge sur la photo ci-dessous.

eqxg6fmsycyiehmpnkrp-6010789

Dans le champ de saisie, collez l’adresse internet suivante puis validez

https://arduino.esp8266.com/stable/package_esp8266com_index.json
http://arduino.esp8266.com/staging/package_esp8266com_index.json

i14cf429n2ketikgu53p-4288053

Cela permet d’indiquer à l’IDE Arduino qu’il doit aller sur le site arduino.esp8266.com afin d’aller y récupérer d’autres cartes compatibles. Maintenant, allez dans le menu Outils puis Type de Cartes et enfin Gestionnaire de carte

w7gbbbt8klsbxmoakuaw-3016050

Dans le champ de recherche, saisissez esp8266 pour trouver les nouvelles cartes à installer. Si les cartes n’apparaissent pas, vérifiez dans les préférences que l’URL est correcte. vérifiez également la connexion Internet. Cliquer sur Installer.

xxusnkfaz0tho7dcpnuw-1333117

L’installation ne dure que quelques minutes. L’installation terminée, fermez le gestionnaire de carte et ouvrez de nouveau le menu Outils. Dans le sous-menu Type de Carte, vous avez maintenant une nouvelle section appelée ESP8266 Modules.

ggw4as9fta6vxraqbbnn-5927439

Sélectionner la carte ESP8285 de destination

Branchez maintenant le convertisseur USB/UART à votre ordinateur. Sur Windows, attendez quelques instants que le pilote soit installé. Depuis l’IDE Arduino, sélectionnez la carte Generic ESP8285 et ajustez le paramètres comme ceci :

  • CPU Frequency : 80 MHz
  • Flash Size : 1M
  • Upload Speed : 115200
  • Port : sélectionnez le port COM sur lequel ce trouve la carte. Ici, c’est sur un Mac. Sur Windows, ce sera COM1…

Si la carte n’apparaît pas dans la liste, lisez ce tutoriel qui explique comment résoudre les problèmes d’installation des convertisseurs CH34x sur Windows, macOS ou Linux.

Installez les librairies manquantes sur l’IDE Arduino

Le firmware Open MQTT Gateway utilise plusieurs librairies Arduino. S’il manque une librairie, vous allez obtenir un message d’erreur à la compilation. La librairie manquante est indiquée dans le message d’erreur (en rouge) sur la console en bas de l’écran.

Vous devrez au minimum installer les librairies IR Remote et RC-Switch. Depuis le menu Croquis, allez dans Inclure une blibliothèque puis Ajouter la bibliothèque ZIP.

yiylglaghkxdvq3uxqgh-4922820

Indiquez le nom de la librairie dans le champ de recherche puis Installer

Téléverser le firmware

Tout est prêt, vous pouvez téléverser le firmware ! Si tout est correct (soudure, câblage, compilation), l’opération se déroule en 2 ou 3 minutes.

Contrairement aux cartes de développement habituelles (Arduino, ESP8266, ESP32), la carte ne dispose d’aucune LED permettant de suivre l’activité du port série. Il faudra se fier uniquement à la barre de progression affichée sur l’IDE Arduino (ou PlatformIO).

Débranchez le câble micro USB d’alimentation puis passez l’interrupteur sur ON. Mettez sous tension et ouvrez le moniteur série de l’IDE Arduino pour vérifier que tout fonctionne bien. Sélectionnez la vitesse de 19200 bauds.

OMG renvoi sur le port série tous les messages. L’adresse IP du pont, l’état de la connexion au broker MQTT…

Configuration de la connexion WiFi via le WiFiManager

Par défaut, OMG utilise la librairie WiFiManager pour configurer la connexion WiFi. C’est pratique si changez le mot de passe du réseau WiFi ou si vous voulez faire une démo domotique chez un ami. Au démarrage, si le pont n’arrive pas à se connecter au réseau WiFi configuré, il démarre en mode AP (Access Point, point d’accès).

Utilisez le gestionnaire de connexion WiFi de votre ordinateur pour vous connecter au RF Bridge 433. Le mot de passe par défaut est your_password (!). N’oubliez pas de le personnaliser dans le fichier User_config.h en cherchant la ligne #define WifiManager_password.

Pour en savoir plus sur la librairie WiFiManager et l’utiliser dans vos projets, lisez ce tutoriel.

Test de réception de codes radio depuis MQTT

Maintenant, ouvrez un Terminal ou utilisez un pour vous connecter au broker MQTT. Adaptez la commande suivante en spécifiant votre nom d’utilisateur / mot de passe

mosquitto_sub -h localhost -t "#" -v -u nomutilisateur -P motdepasse

Ou sans authentification

mosquitto_sub -h localhost -t "#" -v

Appuyez sur le bouton d’une télécommande radio 433MHz, vous devriez recevoir immédiatement les codes interceptés !

Voilà, le projet OpenMQTTGateway s’installe sans vraiment de difficulté. Le plus dure reste encore la soudure du connecteur Série à cause de la faible mouillabilité du circuit (mais rien d’insurmontable). Dans les prochains tutoriels, nous ferrons la même chose avec ESPurna et Tasmota comme avec le Sonoff 4CH Pro. Petite regret, il n’y a encore rien de prévu pour s’interconnecter avec Domoticz ou Jeedom. On devrait pouvoir s’en sortir en développant une passerelle en python, y plus qu’à…

Si le sujet vous intéresse, voici d’autres tutoriels sur le hack de produits domotiques.

Mises à jour

[30/05/2019] Mise à jour du lien vers les cartes ESP8266

Avez-vous aimé cet article ?