Sonoff RF Bridge WIFI 433 - Flashage et configuration sous openHAB

J'ai beaucoup hésité à faire cet article qui m'a pris du temps.
En effet évoquer le flashage et l'utilsiation du composant Sonoff RF Bridge semble un peu superflux du fait que beaucoup de personnes l'ont déjà détaillé dans de nombreux articles.
Pourtant... pourtant je me dois je lui consacrer un tutoriel car même si la partie matériel sera la même que pour du flashage Tasmota classique, la configuration sous openHAB peut
rapidement prendre beaucoup de temps.
Comme d'habitude, je n'hésiterai pas à vous donner des liens d'articles bien faits qui pourront vous aider en parallèle.

 

Sonoff RF Bridge WIFI 433 - Flashage et configuration sous openHAB

 

Avant d'attaquer directement sur le comment du flashage du produit, il me faut d'abord expliquer quel est l'interêt du composant et pourquoi tout le monde s'intéresse à lui.



20191021 174928

Ce produit est peu cher (aux alentours de 6/7 euros sur internet sur des sites tels Aliexpress ou Banggood), son alimentaion peu se faire via un simple cable micro usb type b sur un raspberry ou un port d'ordinateur
ou via une prise électrique avec un chageur type téléphone. (le cable et le chargeur ne sont jamais compris dans l'offre produit)
Il est de petite dimension (carré de 6.2 cm pour une hauteur de 2cm) et possède 2 voyants un rouge et un bleu. Le rouge signifie la réception d'un signal et le bleu l'initialisation.

Son but ? Capter toutes les fréquences 433 Mhz standards. C'est à dire qu'il ne gère pas de multi-protocoles qui utilisent cette fréquences à leur propre format mais des appareils qui émettront des signaux simples en 433 Mhz.
Etant donné que j'ai déjà fait des articles sur le RFXcom vous allez me demander quelle est la différence...
LE RFXcom permet l'interprétation de beaucoup plus de type de sognaux en 433 Mhz et il permet en plus de gérer des formats spéciaux comme le RTS (de chez Somfy... ou autres)
Soyons clairs, le Sonoff RF Bridge ne le fait pas !
Par contre le très très gros avantage et que c'est un matériel qui peut être flashé pour utiliser la protocol MQTT via WIFI.
Là c'est super intéressant car pour 7 euros vous pouvez capter les signaux d'une très grande partie de produits standards et bon marché pour les interpréter via MQTT dans openHAB et en faire des règles ou autre...
C'est pour cette raison que le produit est si populaire !
Sonoff + Flashing du firewareTasmota = MQTT en WIFI pour les fréquences 433 standards !

Prerequis matériels

 

Le Flashing

Il suffit de peu de matériel pour flasher un tel produit et si vous avez peur dites vous que pour 7 euros l'investissements permet de prendre le risque (d'ailleurs il n'y a quasi aucun risque !)
Avant tout on ne branche rien au Sonoff RF Bridge !

a. Opération d'ouverture

20191021 175039

on retourne le module, on ôte les 4 petits caoutchouc de protection noirs aux 4 coins (ils sont simplement collés). On les met bien de côté pour pas les perdre...

20191021 175148

On dévisse et pareil, on perd pas les 4 vis...

20191021 175319

A présent on sort la carte de circuit imprimé délicatement. Elle vient facilement.

20191021 175457

Le papier blanc sert à réfléchir la led verte centrale qui affiche la marque Sonoff quand c'est connecté à une alimentation.
On va rabattre le connecteur du papier blanc vers la gauche d'après la photo ci-dessus pour accéder aux composants qui sont en dessous.

20191021 175539

Parfait. A présent voyez en rouge les 4 trous qui nous intéressent. C'est là où il nous faut relier notre Sonof RF Bridge avec un adaptateur type FTDI qui va nous permettre de dialoguer
avec le Sonoff... et donc de lui pousser un autre firmeware... qui sera le Tasmota.
Notez aussi le rectangle vert situé à coté du rectangle rouge. C'est un commutateur qu'il faut à présent positionner ainsi afin que le Sonoff se mette en mode apprentissage.

b. 4 petites soudures

20191021 183136

Perso, comme vous pouvez le voir sur la photo ci-dessus j'ai positionné 4 connecteurs (voyez sur la droite un ensemble que j'avais et pour laquel j'en ai pris 4 accolés)
puis leur au coupé un peu leur pate afin de n'avoir que peu de dépassement qui me permettra de souder facilement et de ne pas être géné par ces pattes
lorsque l'on reféremera le Sonoff à la fin.

 

20191021 183209

Voilà, c'est soudé. J'ai même réduit aussi un peu le dessus en les coupant un peu pour pouvoir bien rabattre le papier blanc et sa patte qui le maintient.

c. Raccorder

20191115 205246
A présent il faut relier à votre adaptateur FTDI.

Voici le tableau à respecter :

  BRIDGE RF 

  FTDI  

  Couleur de mon cable 

3.3V

VCC

Jaune

RX

TX

Vert

TX

RX

Bleu

GND

GND

Orange

Je vous donne en exemple mon adaptateur FTDI mais le votre a peut-être des positions de sorties différentes.
Une chose très importante à noter est le voltage. Si comme le mien ci-dessous par défaut le commutateur est positionné sur 5V surtout changez-le car il faut absoluement être en 3.3V !!

FTDI

d. Déterminer le port COM

  1. Brancher le câble USB sur l'ordinateur (alimentation reliée au FTDI) et pas celui du bridge !!! Et en même temps, maintenir le bouton d'appairage pendant 2s (petit bouton noir situé sur le côté du Sonoff Bridge)
  2. Vous allez entendre que Windows détecte un nouveau matériel. Il va installer le driver automatiquement.
  3. Il faut à présent rechercher le bon port COM utilisé par Windows.

Pour cela aller dans le "Gestionnaire de périphériques" et découvrez le port assigné.

Dans mon cas c'est le COM6 :

configuration

Retenez bien cette indication elle servira plus tard.

e. Prérequis logiciels

  1. Télécharger Python (dans mon cas version 3.8 64bits pour windows)

https://www.python.org/downloads/release/python-380/
Puis installez-le.
Ne pas oublier de positionner le répertoire Python dans le Path de Windows au moment de l'installation.

  1. Télécharger ESPTool (dans mon cas Version 2.8)

https://github.com/espressif/esptool/releases

Dézipper.
Aller dans le répertoire créé
(Dans mon cas c'est : D:\Tmp\Tasmota\esptool-2.8)

  1. Télécharger la dernière version du firmware Tasmota (dans mon cas c'est la version Sonoff-Tasmota v8.1.0

https://github.com/arendst/Tasmota/releases
Personnellement je suis français et je parle la langue de Molière donc je choisis le fichier binaire : Sonoff-FR.bin

;o)

Petite remarque : Ne prenez pas une trop vieille version de Tasmota car c'est seuelement depuis la version d'avril 2019 que la communication RF 433 - par exemple - est bien gérée dans Tasmota pour le Bridge Sonoff)
Tout ça pour dire que ce firmware est très bien maintenu et qu'il apporte toujours son lot de correctifs, nouveautés et compatibilités produits !
Les logiciels sont prêts.

 
f. Le flashing

Ouvrir une invite de commande en tant qu'administrateur (clic droit sur "invite de commande" exécuter en tant qu'administrateur)

 

 

Microsoft Windows [version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Tous droits réservés.

C:\Windows\system32>d:
D:\>cd Tmp
D:\Tmp>cd Tasmota
D:\Tmp\Tasmota>cd esptool-2.8

A présent nous installons ESPTOOL pour PYTHON.

D:\Tmp\Tasmota\esptool-2.8>python setup.py install
running install running bdist_egg
running egg_info creating esptool.egg-info
writing esptool.egg-info\PKG-INFO
writing dependency_links to esptool.egg-info\dependency_links.txt
writing entry points to esptool.egg-info\entry_points.txt
writing requirements to esptool.egg-info\requires.txt
writing top-level names to esptool.egg-info\top_level.txt
writing manifest file 'esptool.egg-info\SOURCES.txt'
reading manifest file 'esptool.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
no previously-included directories found matching 'ecdsa'
no previously-included directories found matching 'pyaes'
no previously-included directories found matching 'flasher_stub'
no previously-included directories found matching '.github'
warning: no previously-included files found matching '.git*'
warning: no previously-included files found matching '.travis*'
writing manifest file 'esptool.egg-info\SOURCES.txt'
installing library code to build\bdist.win-amd64\egg
running install_lib
running build_py creating build creating build\lib
copying esptool.py -> build\lib
copying espsecure.py -> build\lib
copying espefuse.py -> build\lib creating build\bdist.win-amd64
creating build\bdist.win-amd64\egg copying build\lib\espefuse.py -> build\bdist.win-amd64\egg
copying build\lib\espsecure.py -> build\bdist.win-amd64\egg
copying build\lib\esptool.py -> build\bdist.win-amd64\egg
byte-compiling build\bdist.win-amd64\egg\espefuse.py to espefuse.cpython-38.pyc
byte-compiling build\bdist.win-amd64\egg\espsecure.py to espsecure.cpython-38.pyc
byte-compiling build\bdist.win-amd64\egg\esptool.py to esptool.cpython-38.pyc
creating build\bdist.win-amd64\egg\EGG-INFO
copying esptool.egg-info\PKG-INFO -> build\bdist.win-amd64\egg\EGG-INFO
copying esptool.egg-info\SOURCES.txt -> build\bdist.win-amd64\egg\EGG-INFO
copying esptool.egg-info\dependency_links.txt -> build\bdist.win-amd64\egg\EGG-I NFO
copying esptool.egg-info\entry_points.txt -> build\bdist.win-amd64\egg\EGG-INFO
copying esptool.egg-info\requires.txt -> build\bdist.win-amd64\egg\EGG-INFO
copying esptool.egg-info\top_level.txt -> build\bdist.win-amd64\egg\EGG-INFO
zip_safe flag not set; analyzing archive contents...
__pycache__.esptool.cpython-38: module MAY be using inspect.trace
creating dist creating 'dist\esptool-2.8-py3.8.egg' and adding 'build\bdist.win-amd64\egg' to it
removing 'build\bdist.win-amd64\egg' (and everything under it)
Processing esptool-2.8-py3.8.egg
creating c:\program files\python38\lib\site-packages\esptool-2.8-py3.8.egg
Extracting esptool-2.8-py3.8.egg to c:\program files\python38\lib\site-packages
Adding esptool 2.8 to easy-install.pth file
Installing espefuse.py-script.py script to C:\Program Files\Python38\Scripts
Installing espefuse.py.exe script to C:\Program Files\Python38\Scripts
Installing espsecure.py-script.py script to C:\Program Files\Python38\Scripts
Installing espsecure.py.exe script to C:\Program Files\Python38\Scripts
Installing esptool.py-script.py script to C:\Program Files\Python38\Scripts
Installing esptool.py.exe script to C:\Program Files\Python38\Scripts
Installed c:\program files\python38\lib\site-packages\esptool-2.8-py3.8.egg
Processing dependencies for esptool==2.8
Searching for ecdsa Reading https://pypi.org/simple/ecdsa/
Downloading https://files.pythonhosted.org/packages/a2/25/3bb32da623b39a27a07d19 4cd58e4540224421d924661de2e694304ae4fa/ecdsa-0.14.1-py2.py3-none-any.whl#sha256= e108a5fe92c67639abae3260e43561af914e7fd0d27bae6d2ec1312ae7934dfe
Best match: ecdsa 0.14.1
Processing ecdsa-0.14.1-py2.py3-none-any.whl
Installing ecdsa-0.14.1-py2.py3-none-any.whl to c:\program files\python38\lib\si te-packages
writing requirements to c:\program files\python38\lib\site-packages\ecdsa-0.14.1 -py3.8.egg\EGG-INFO\requires.txt
Adding ecdsa 0.14.1 to easy-install.pth file
Installed c:\program files\python38\lib\site-packages\ecdsa-0.14.1-py3.8.egg
Searching for pyaes
Reading https://pypi.org/simple/pyaes/
Downloading https://files.pythonhosted.org/packages/44/66/2c17bae31c906613795711 fc78045c285048168919ace2220daa372c7d72/pyaes-1.6.1.tar.gz#sha256=02c1b1405c38d3c 370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f Best match: pyaes 1.6.1
Processing pyaes-1.6.1.tar.gz
Writing C:\Users\Admin\AppData\Local\Temp\easy_install-qw347uu_\pyaes-1.6.1\setu p.cfg
Running pyaes-1.6.1\setup.py -q bdist_egg --dist-dir C:\Users\Admin\AppData\Loca l\Temp\easy_install-qw347uu_\pyaes-1.6.1\egg-dist-tmp-to9bqvro zip_safe flag not set; analyzing archive contents...
Copying pyaes-1.6.1-py3.8.egg to c:\program files\python38\lib\site-packages Adding pyaes 1.6.1 to easy-install.pth file
Installed c:\program files\python38\lib\site-packages\pyaes-1.6.1-py3.8.egg Searching for pyserial>=3.0
Reading https://pypi.org/simple/pyserial/
Downloading https://files.pythonhosted.org/packages/0d/e4/2a744dd9e3be04a0c09074 14e2a01a7c88bb3915cbe3c8cc06e209f59c30/pyserial-3.4-py2.py3-none-any.whl#sha256= e0770fadba80c31013896c7e6ef703f72e7834965954a78e71a3049488d4d7d8
Best match: pyserial 3.4 Processing pyserial-3.4-py2.py3-none-any.whl
Installing pyserial-3.4-py2.py3-none-any.whl to c:\program files\python38\lib\si te-packages
Adding pyserial 3.4 to easy-install.pth file Installing miniterm.py script to C:\Program Files\Python38\Scripts
Installed c:\program files\python38\lib\site-packages\pyserial-3.4-py3.8.egg
Searching for six Reading https://pypi.org/simple/six/
Downloading https://files.pythonhosted.org/packages/65/26/32b8464df2a97e6dd1b656 ed26b2c194606c16fe163c695a992b36c11cdf/six-1.13.0-py2.py3-none-any.whl#sha256=1f 1b7d42e254082a9db6279deae68afb421ceba6158efa6131de7b3003ee93fd Best match: six 1.13.0
Processing six-1.13.0-py2.py3-none-any.whl
Installing six-1.13.0-py2.py3-none-any.whl to c:\program files\python38\lib\site -packages
Adding six 1.13.0 to easy-install.pth file
Installed c:\program files\python38\lib\site-packages\six-1.13.0-py3.8.egg
Finished processing dependencies for esptool==2.8
D:\Tmp\Tasmota\esptool-2.8>

 

 

 
A présent nous voici aux 4 grandes étapes du flashing.

ETAPE 1 : SAUVEGARDE DU FIRMWARE ACTUEL

C'est une étape que je vous invite à ne pas négliger car utile si l'on veut retourner sur le firmware d'origine.
Veuillez remplacer le port COM par celui que vous avez récupéreé dans l'une des étapes précédentes.
Noter auss ile nom Backup.bin : c'est le nom du fichier que je donne pour la sauvegarde de mon firmware actuel. Donnez-lui un nom plus pertinent ! ;o)

D:\Tmp\Tasmota\esptool-2.8>python esptool.py --port COM6 read_flash 0x00000 0x100000 Backup.bin

esptool.py v2.8

Serial port COM6

Connecting....

Detecting chip type... ESP8266

Chip is ESP8285

Features: WiFi, Embedded Flash

Crystal is 26MHz

MAC: 84:0d:8e:66:0e:0d

Uploading stub...

Running stub...

Stub running...

1048576 (100 %)

1048576 (100 %)

Read 1048576 bytes at 0x0 in 98.7 seconds (85.0 kbit/s)...

Hard resetting via RTS pin...

 

 

=> Déconnecter l'USB de l'ordinateur et reconnecter en maintenance le bouton poussoir pendant 2s


ETAPE 2 : SUPPRESSION DU FIRMWARE ACTUEL

Etape décisive qui va nettoyer complètement le firmware actuellement présent sur votre matériel !
(comme précédement remplacer le port COM6 par le vôtre)

D:\Tmp\Tasmota\esptool-2.8>esptool.py --port COM6 erase_flash

esptool.py v2.8

Serial port COM6

Connecting....

Detecting chip type... ESP8266

Chip is ESP8285

Features: WiFi, Embedded Flash

Crystal is 26MHz

MAC: 84:0d:8e:66:0e:0d

Uploading stub...

Running stub...

Stub running...

Erasing flash (this may take a while)...

Chip erase completed successfully in 2.9s

Hard resetting via RTS pin...

 

 

=> Déconnecter l'USB de l'ordinateur et reconnecter en maintenance le bouton poussoir pendant 2s

 

ETAPE 3 : ECRITURE DU FIRMWARE TASMOTA

Encore une fois, positionner le bon port COM et le bon nom de fichier que vous avez téléchargé précédement.
Patientez car cela prend un peu plus d'une minute.

D:\Tmp\Tasmota\esptool-2.8>esptool.py --port COM6 write_flash -fs 1MB -fm dout 0x0 sonoff-FR.bin

esptool.py v2.8

Serial port COM6

Connecting....

Detecting chip type... ESP8266

Chip is ESP8285

Features: WiFi, Embedded Flash

Crystal is 26MHz

MAC: 84:0d:8e:66:0e:0d

Uploading stub...

Running stub...

Stub running...

Configuring flash size...

Compressed 578864 bytes to 398905...

Wrote 578864 bytes (398905 compressed) at 0x00000000 in 35.5 seconds (effective

130.6 kbit/s)...

Hash of data verified.

Leaving...

Hard resetting via RTS pin...

D:\Tmp\Tasmota\esptool-2.8>

 

 

=> Déconnecter l'USB de l'ordinateur et reconnecter en maintenance le bouton poussoir du Sonoff pendant 2s

ETAPE 4 : DEMARRAGE DU SONOFF BRIDGE RF 433

Cette fois si on débranche les connecteurs FDTI au composant Sonoff et on alimente la carte Sonoff au port USB de l'ordinateur par exemple.

Configuration du reseau WIFI

Utilisez votre smartphone ou une tablette/ordi pour chercher un réseau WIFI qui devrait apparaitre.
Chez moi c'était du type "Sonoff-3597" ou tasmota-6976

Vous sélectionnez ce réseau pour vous connecter dessus.
A présent il faut utiliser un navigateur web pour se connecter à l'IP de l'appareil Sonoff.
Tapez l'IP suivante : 192.168.4.1

Vous obtiendrez une page ainsi :

ip
Cette page permet la définition de votre réseau WIFI et d'un réseau secondaire (optionnel) pour que le firmware Tasmota puisse communiquer.

Vous pouvez cliquer sur "Scan des réseaux WIFI" il vous proposera ainsi un réseau wifi qu'il détecte.

Ensuite :

AP1 SSID : c'est le nom du reseau WIFI principal
Mot de passe AP1 : c'est le password de votre reaseau WIFI princiapl
AP2 SSID : c'est le nom du reseau WIFI secondaire (utilse si vous avez un pb avec vote reseau principal).
Tout le monde conseil de mettre son nom de reseau en point d'accès mobile de votrer smartphone au cas où votre wifi principal ne fonctionnerait plus.
Ne soyez pas surpris que dans le titre il y ait de marqué Sonoff basic : vous n'avez pas encore configuré le type de sonoff.

Enregistrer.

Il va se relancer tout seul.

Configuration du modèle

A présent il faut utiliser un navigateur web pour se connecter à l'IP de l'appareil Sonoff configuré sur votre réseau.

Pour connaitre l'IP assigné, utiliser un outil qui scanne les IP de votre réseau.
Chez moi le sonoff était situé sur l'IP :  192.168.0.18
Tapez cette ip dans votre naivateur et vous arrivez dans le beau menu de configuration de Tasmota !

Par défaut le firmware défini par défaut le modèle BASIC du sonoff.
Aller dans configuration et paramètre du module.

menu1

 

Nous nous avons le modèle Sonoff RF que l'on selectionne.

 

menu2

Enregistrez.

Attendez quelques secondes que votre module redémarre dans la bonne configuration.



Configuration de MQTT

Vous avez presque fini.
Il reste juste maintenant la configuration MQTT, primordiale pour dialoguer dans openHAB
On retourne dans Configuration

menu3

puis Configuration MQTT
Hote = IP de openHAB
Port = port de MQTT 
Utilisateur : user de MQTT
PAssword = mote de passe de votre MQTT
Topic : le label MQTT qui sera interprété (cf config openHAB ci-dessous)

menu4 

Puis on sauvegarde !
A présent votre module peut dialoguer avec MQTT. Vous pouvez aller dans le menu Tasmota et alelr dans console, vous verrez la log de connection à MQTT apparaitre avec votre configuration !


FIN - Dans openHAB !!

Tout d'abord on cree un fichier de type things.

mqtt.things dans lequel on positionee la configuration de notre sonoff rf Bridge :
Avec le port de votre mqtt (souvent 1883), l'IP de votre openHAB, le user et le password.
Le nom SonoffRFBridge correspond au nom que vous avez donné dans la configuration de votre module sous Tasmota (configuration MQTT du chapitre précédent)

ATTENTION !!! La création du broker doit déjà avoir été faite auparavant sous openHAB via le PaperUI !

// MQTT - All Things Definitions
Bridge mqtt:broker:embedded-mqtt-broker "MQTT Broker" [ host="192.168.0.xx", port=1883, secure="AUTO", username="monuser", password="monpassword" ]
{
    // Modèle : Sonoff RF 433 Bridge
    Thing mqtt:topic:SonoffRFBridge "SONOFF RF Bridge" @ "RDC"
    {
        Channels:
        Type string : reachable     "Reachable"            [ stateTopic="tele/SonoffRFBridge/LWT" ]
        Type string : recieveddata  "Received Data"        [ stateTopic="tele/SonoffRFBridge/RESULT", transformationPattern="JSONPATH:$.RfReceived.Data" ]
        Type string : recievedsync  "Received Sync"        [ stateTopic="tele/SonoffRFBridge/RESULT", transformationPattern="JSONPATH:$.RfReceived.Sync" ]
        Type string : recievedlow   "Received Low"         [ stateTopic="tele/SonoffRFBridge/RESULT", transformationPattern="JSONPATH:$.RfReceived.Low" ]
        Type string : recievedhigh  "Received High"        [ stateTopic="tele/SonoffRFBridge/RESULT", transformationPattern="JSONPATH:$.RfReceived.High" ]
        Type string : recievedrfkey "Received RfKey"       [ stateTopic="tele/SonoffRFBridge/RESULT", transformationPattern="JSONPATH:$.RfReceived.RfKey" ]
        Type switch : button1       "Bouton 1"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY1", transformationPattern="JSONPATH:$.RfKey1" ]
        Type switch : button2       "Bouton 2"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY2", transformationPattern="JSONPATH:$.RfKey2" ]
        Type switch : button3       "Bouton 3"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY3", transformationPattern="JSONPATH:$.RfKey3" ]
        Type switch : button4       "Bouton 4"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY4", transformationPattern="JSONPATH:$.RfKey4" ]
        Type switch : button5       "Bouton 5"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY5", transformationPattern="JSONPATH:$.RfKey5" ] 
        Type switch : button6       "Bouton 6"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY6", transformationPattern="JSONPATH:$.RfKey6" ]
        Type switch : button7       "Bouton 7"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY7", transformationPattern="JSONPATH:$.RfKey7" ]
        Type switch : button8       "Bouton 8"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY8", transformationPattern="JSONPATH:$.RfKey8" ]
        Type switch : button9       "Bouton 9"             [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY9", transformationPattern="JSONPATH:$.RfKey9" ]
        Type switch : button10      "Bouton 10"            [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY10", transformationPattern="JSONPATH:$.RfKey10" ]
        Type switch : button11      "Bouton 11"            [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY11", transformationPattern="JSONPATH:$.RfKey11" ]
        Type switch : button12      "Bouton 12"            [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY12", transformationPattern="JSONPATH:$.RfKey12" ]
        Type switch : button13      "Bouton 13"            [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY13", transformationPattern="JSONPATH:$.RfKey13" ]
        Type switch : button14      "Bouton 14"            [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY14", transformationPattern="JSONPATH:$.RfKey14" ]
        Type switch : button15      "Bouton 15"            [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY15", transformationPattern="JSONPATH:$.RfKey15" ]
        Type switch : button16      "Bouton 16"            [ stateTopic="stat/SonoffRFBridge/RESULT", commandTopic="cmnd/SonoffRFBridge/RFKEY16", transformationPattern="JSONPATH:$.RfKey16" ]
        Type number : rssi          "WiFi Signal Strength" [ stateTopic="tele/SonoffRFBridge/STATE", transformationPattern="JSONPATH:$.Wifi.RSSI" ]
    }
   // Ici se rajouteront vos composants de type 433
}


Pour terminer on cree un fichier de type items :
bridge.items

// SONOFF RF BRIDGE 433
String Sonoff_RF_Reachable      "Reachable: [%s]"                <contactable>   (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:reachable"}
String Sonoff_RF_Received_Data  "Received Data: [%s]"            <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:recieveddata"}
String Sonoff_RF_Received_Sync  "Received Sync: [%s]"            <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:recievedsync"}
String Sonoff_RF_Received_Low   "Received Low: [%s]"             <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:recievedlow"}
String Sonoff_RF_Received_High  "Received High: [%s]"            <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:recievedhigh"}
String Sonoff_RF_Received_RfKey "Received RfKey: [%s]"           <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:recievedrfkey"}
Switch Sonoff_RF_Button_1       "Bouton 1"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button1", autoupdate="false"}
Switch Sonoff_RF_Button_2       "Bouton 2"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button2", autoupdate="false"}
Switch Sonoff_RF_Button_3       "Bouton 3"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button3", autoupdate="false"}
Switch Sonoff_RF_Button_4       "Bouton 4"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button4", autoupdate="false"}
Switch Sonoff_RF_Button_5       "Bouton 5"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button5", autoupdate="false"}
Switch Sonoff_RF_Button_6       "Bouton 6"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button6", autoupdate="false"}
Switch Sonoff_RF_Button_7       "Bouton 7"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button7", autoupdate="false"}
Switch Sonoff_RF_Button_8       "Bouton 8"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button8", autoupdate="false"}
Switch Sonoff_RF_Button_9       "Bouton 9"                       <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button9", autoupdate="false"}
Switch Sonoff_RF_Button_10      "Bouton 10"                      <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button10", autoupdate="false"}
Switch Sonoff_RF_Button_11      "Bouton 11"                      <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button11", autoupdate="false"}
Switch Sonoff_RF_Button_12      "Bouton 12"                      <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button12", autoupdate="false"}
Switch Sonoff_RF_Button_13      "Bouton 13"                      <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button13", autoupdate="false"}
Switch Sonoff_RF_Button_14      "Bouton 14"                      <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button14", autoupdate="false"}
Switch Sonoff_RF_Button_15      "Bouton 15"                      <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button15", autoupdate="false"}
Switch Sonoff_RF_Button_16      "Bouton 16"                      <none>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:button16", autoupdate="false"}
Number Sonoff_RF_RSSI           "WiFi Signal Strength [%d %%]"   <wifi>          (gSonoff_RF) { channel="mqtt:topic:SonoffRFBridge:rssi" }


A présent votre configuration de Sonoff bridge et terminé !
(n'oubliez pas de remonter complètement le module ;o)