Sommaire

Pont ZigBee en Wi-Fi

Introduction

Dans mes recherches d’une solution de capteurs sous batterie consommant peu d’énergie, je me suis naturellement tournée vers le protocole Open Source ZigBee. Un autre avantage non négligeable est que les capteurs ZigBee on la réputation de ne pas être des plus chères.
Afin de faire la passerelle entre ce protocole et mon réseau sans passé par le PC d’un autre (le “Cloud”), il existe plusieurs solutions. J’ai longtemps regardé la solution zigbee2mqtt mais je n’ai pas sauté le pas devant la complexité de mise en place. Il y a un an de cela est apparu le Sonoff ZBBridge. À partir de là commença les aventures de la communauté Tasmota sur le sujet. Si cet article existe, c’est parce qu’ils sont arrivés à leur fin ! Donc oui, le Sonoff ZBBridge est enfin flashable sous Tasmota !

De ce fait, nous verrons ici comment flasher ce dernier et comment l’intégrer à notre très cher Home Assistant.

/pont-zigbee-en-wifi/img/IMG_1.webp
Sonoff ZBBridge

Tasmota

Ma source principale est le tutoriel du site de Blakadder.

Préparation

Dans le but de flasher l’équipement, il va falloir ouvrir le boitier afin de pouvoir y connecter le convertisseur USB/TTL. Les vis de maintien se trouvent en dessous des quatre pattes en silicone.

/pont-zigbee-en-wifi/img/IMG_2-3.webp
Démontage du boitier

On va maintenant devoir trouver un moyen de fixer les connecteurs du convertisseur sur la carte. Les connecteurs Dupont ne rentrent pas dans les trous. Afin de faire en sorte de pas avoir à souder (cela n’a pas trop d’intérêt car cette connexion est temporaire), j’ai essayé de trouver une solution.
J’ai remarqué que mes fils d’étains rentraient bien dans les trous et aussi correctement dans mes connecteurs Dupont femelles. J’ai donc utilisé des bouts de fil d’étain pour faire l’interface avec la carte. Afin d’éviter tout problème, j’ai auparavant isolé la carte avec du ruban adhésif isolant électrique.
La photo ci-dessous montre cela, ainsi que les points de connexions au convertisseur.

/pont-zigbee-en-wifi/img/IMG_4.webp
Points de connexion au convertisseur USB/TTL

Après un travail minutieux :

/pont-zigbee-en-wifi/img/IMG_5.webp
L’étau se resserre !

Tableau associatif :

Sonoff ZBBridge Convertisseur USB/TTL
IO0 GND
GND GND
3V3 3V3
ETX RX
ERX TX
Attention !
On remarque bien que le TX de l’un va vers le RX de l’autre !
Et aussi que, IO0 est relié aux GND pour passer en mode flashage.
Danger !
On utilise bien le 3.3 Volts du convertisseur et non le 5 sinon on grille la carte.

Flashage et configuration Wi-Fi

Télécharger donc le firmware Tasmota spécial Zigbee Bridge : tasmota-zbbridge.bin
Pour le flashage, j’utilise ESPHome-Flasher mais vous pouvez utiliser autre chose.

Après avoir branché le convertisseur au PC, on sélectionne le bon port COM, le bon firmware et on flashe la carte.

/pont-zigbee-en-wifi/img/Screenshot_1-2-3.webp
Flashage

Une fois le “Flashing is complete”, on peut déconnecter tous les fils et remettre la carte dans son boitier.

On alimente donc le pont via son port micro-USB.
Une fois ce dernier démarrer il devrait diffuser un AP Wi-Fi avec un nom du type “tasmota_[un-ID]”. En vous connectant dessus, la page du routeur devrait s’ouvrir (sinon on va sur l’adresse http://192.168.4.1). On y inscrit donc ces informations de connexion.

/pont-zigbee-en-wifi/img/Screenshot_4.webp
Configuration Wi-Fi
Bug ?

J’ai eu des erreurs d’authentification à cette étape (le pont revient alors en mode AP).
J’ai réussi à faire la connexion en remasquant le mot de passe avant de sauvegarder.

Je pense qu’il y a un bug ici et qu’il faut absolument que le MDP soit masqué lors de la validation (ou j’ai vraiment raté mon MDP à chaque fois !).

Flashage et configuration ZigBee

Maintenant que le module est bien sur notre réseau Wi-Fi, il faut flasher la puce ZigBee.
Pour cela, on télécharge le firmware approprié : ncp-uart-sw_6.7.8_115200.ota

On va alors dans le menu Firmware Upgrade et on utilise notre fichier téléchargé juste avant.

/pont-zigbee-en-wifi/img/Screenshot_5-6-7.webp
Flashage de la puce ZigBee

Après quelques minutes, le flashage se termine et le module redémarre. En consultant la console (menu Console), on obtient la sortie suivante :

20:59:50.263 ZIG: Resetting EZSP device
20:59:51.532 RSL: RESULT = {“ZbState”:{“Status”:1,“Message”:“EFR32 booted”,“RestartReason”:“Power-on”,“Code”:2}}
20:59:51.584 RSL: RESULT = {“ZbState”:{“Status”:55,“Version”:“6.7.8.0”,“Protocol”:8,“Stack”:2}}
20:59:51.586 RSL: RESULT = {“ZbState”:{“Status”:3,“Message”:“Configured, starting coordinator”}}
20:59:52.869 ZIG: Factory reset EZSP device
20:59:53.100 ZIG: Subscribe to group 0 ‘ZbListen0 0’
20:59:53.156 RSL: RESULT = {“ZbState”:{“Status”:0,“Message”:“Started”}}
20:59:53.157 ZIG: Zigbee started

On va maintenant créer le bridge pour HA. Cela se fait dans la section Configuration > Configure Other.
On remplace donc la template le code ci-dessous avant de sauvegarder.

1
{"NAME":"ZHA ZBBridge","GPIO":[56,208,0,209,59,58,0,0,0,0,0,0,17],"FLAG":0,"BASE":18}

Ensuite, on sélectionne le type de module “ZHA ZBBridge (0)” dans la liste du menu Configuration > Configure Module avant de sauvegarder.

Quelques explications
Ce mode de configuration créera un socket TCP qui va simplement relayer toutes les données ZigBee au serveur (donc sans les traiter).
De cette manière, toute la configuration se fait sur HA (spoil : via l’intégration ZHA).

Ainsi, on va créer une règle pour lancer le bridge TCP au démarrage du module et activer cette dernière. On tape donc dans la console le contenu suivant :

1
2
Rule1 ON System#Boot do TCPStart 8888 endon
Rule1 1

Si vous le souhaitez, vous pouvez utiliser un autre port que le 8888.

On redémarre donc le module avec un clic sur le bouton Restart.

Peaufinages

Étant donné que ce module a une fonction de serveur, je lui mets une adresse IP statique.

Pour cela, je tape les commandes suivantes dans la console :

1
2
3
4
IPAddress1 192.168.92.253
IPAddress3 255.255.255.0
IPAddress2 192.168.92.254
IPAddress4 1.1.1.1

IPAddress[1-4] correspondent respectivement à l’adresse IP, la passerelle par défaut, le masque de sous-réseau et le serveur DNS.

J’ai aussi changé les noms d’affichage lors de l’application de la template (section Configuration > Configure Other).

Un reboot plus tard, on peut passer à l’intégration sur Home Assistant.

Home Assistant

Intégration

On ajoute donc l’intégration ZHA (Zigbee Home Automation) : https://my.home-assistant.io/badges/config_flow_start.svg

/pont-zigbee-en-wifi/img/Screenshot_8-9-10.webp
Configuration ZHA [1/3]

On choisit ensuite le type de radio EZSP :

/pont-zigbee-en-wifi/img/Screenshot_11.webp
Configuration ZHA [2/3]

On entre donc le lien d’accès qui prend la forme de socket://<adresse_ip>:<port>, on spécifie le baud à 115200 et un contrôle de flux de données de type software.

/pont-zigbee-en-wifi/img/Screenshot_12-13.webp
Configuration ZHA [3/3]

C’est fini pour l’intégration ! Reste plus qu’à ajouter nos éléments ZigBee.

Ajout de périphérique

J’ai pris des capteurs de porte et bouton de la gamme Aqara.
Pour l’exemple de cet article, je prendrai le bouton.

/pont-zigbee-en-wifi/img/IMG_6.webp
Switch Aqara WXKG11LM

Sur la page de ZHA, on clic donc sur bouton AJOUTER DES APPAREILS et ensuite on passe notre équipement en mode pairing en cliquant sur le bouton de reset pendant ~8 secondes.

/pont-zigbee-en-wifi/img/Screenshot_14.webp
Zigbee Coordinator

/pont-zigbee-en-wifi/img/Screenshot_15-16.webp
Périphérique trouvé

Si votre périphérique n’est pas trouvé, faites un reset de votre équipement en maintenant le bouton de pairing plus longtemps et refaites la procédure.

Voilà ! Maintenant, votre périphérique est ajouté !

À vos automatisations pour le contrôle de vos équipements.
N’hésitez pas à utiliser l’assistant d’automatisation en cliquant sur le  du bloc Automatisations dans la page de détail de vos périphériques.
https://my.home-assistant.io/badges/devices.svg

Voici la première que j’ai faite pour contrôler une lampe connectée qui n’avait pas de télécommande :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
- alias: Cuisine switch
  description: 'Controle la lumière'
  trigger:
  - device_id: cba3ebd43ab1a3c5d05812e455687d59
    domain: zha
    platform: device
    type: remote_button_short_press
    subtype: remote_button_short_press
  condition: []
  action:
  - service: light.toggle
    target:
      entity_id: light.suspension_cuisine
  mode: single

Malgré que le chemin d’appel soit long :

  • Envoie (appui sur le bouton) :
    • ZigBee vers pont
    • Pont vers AP Wi-Fi (box)
    • Box vers serveur
  • Traitement HA
  • Commande :
    • Serveur vers Box
    • Box (AP Wi-Fi) vers lampe

La commande met le même temps que pour un couple ampoule et télécommande Philips HUE alors que mon serveur a un Intel Atom x5-Z8350 !

Conclusion

La technologie ZigBee permet sans effort d’avoir de l’IoT non-cloud. Son système de pairing est assez pratique contrairement à ce que j’ai du faire pour le pont RF.

Comparé au RF, les équipements ZigBee transmettent leur pourcentage de batterie. Je pense donc être convaincu que je devrais utiliser des capteurs ZigBee pour les éléments importants (porte d’entrée, fenêtres) et réutiliser ceux en RF pour des trucs moins critiques (frigo, bar 😉, lunette des toilettes 🤣).