Passerelle Lidl Silvercrest : firmware open source Zigbee + Thread pour Home Assistant

Bonjour à tous,

Je partage un projet sur lequel je travaille depuis quelques mois : un firmware custom complet pour la passerelle Zigbee Lidl Silvercrest.

Cette passerelle bon marché, souvent considérée comme dépassée, finit souvent au fond d’un tiroir. Le projet essaye de lui donner une seconde vie en la transformant en hub domotique 100% local, directement utilisable avec Home Assistant — coordinateur Zigbee, routeur Thread, ou routeur Zigbee mesh.

Ce qu’on peut en faire

  • Coordinateur Zigbee — compatible Zigbee2MQTT (ember) et ZHA, via le réseau (socket TCP)
  • Thread Border Router — otbr-agent tourne nativement sur la passerelle, intégration HA directe
  • Routeur Zigbee 3.0 — pour étendre un réseau mesh existant
  • Flashage radio OTA — pas besoin de sonde SWD, tout se fait par le réseau

Le mode (Zigbee ou Thread) se choisit au moment du flash — c’est une seule image firmware pour les deux.

Matériel

La passerelle embarque un Realtek RTL8196E (Linux, 200 MHz MIPS, 32 MB RAM) et une radio Silabs EFR32MG1B (Zigbee/Thread) reliée en UART. Le projet fournit le firmware des deux puces.

Installation

Un seul script fait tout : build de l’image, détection automatique de l’état de la passerelle, flash :

git clone https://github.com/jnilo1/hacking-lidl-silvercrest-gateway.git
cd hacking-lidl-silvercrest-gateway
./flash_install_rtl8196e.sh

Il faut un adaptateur USB-série (3.3V, 38400 baud) pour le premier flash uniquement. Ensuite, les mises à jour se font par le réseau (SSH + TFTP).

Ce qui a été fait

  • Bootloader custom avec auto-flash et notification UDP
  • Noyau Linux 5.10 recompilé avec driver Ethernet optimisé, IPv6, gpio-leds
  • Rootfs minimal (BusyBox + Dropbear SSH)
  • Scripts de backup/restore automatisés
  • Documentation complète (hardware, bootloader, kernel, radio)

Liens

N’hésitez pas si vous avez des questions ou si vous tentez l’aventure — les retours sont les bienvenus !

Sympa, cela va permettre de recycler ce genre de matériel !

Bonjour,
Je n’ai pas vu si cela concerne le modèle v1 ou v2 de la passerelle

A priori les deux

C’était le cas pour la version précédente que j’utilise sur une V2

Je confirme. La seule contrainte est de pouvoir mettre la passerelle en boot mode via la console série avec ESC. Pas la peine de récupérer le password d’origine (le hack de Paul Banks est inutile)

Je confirme que le projet est top, j’ai flashé la mienne en OTBR et ça marche nickel.
Merci au devs

Bonjour,

Je l’ai flashé aussi en otbr, mais j’ai erreur lors du démarrage de otbr-agent:

Mar 19 10:10:15 (none) user.notice : [NOTE]-AGENT---: Backbone interface: eth0
Mar 19 10:10:17 (none) user.warn otbr-agent[82]: 49d.17:03:02.000 [W] P-SpinelDrive-: Wait for response timeout
Mar 19 10:10:19 (none) user.warn otbr-agent[82]: 49d.17:03:04.012 [W] P-SpinelDrive-: Wait for response timeout
Mar 19 10:10:21 (none) user.warn otbr-agent[82]: 49d.17:03:06.016 [W] P-SpinelDrive-: Wait for response timeout
Mar 19 10:10:21 (none) user.crit otbr-agent[82]: 49d.17:03:06.016 [C] Platform------: Init() at spinel_driver.cpp:87: Failure
Mar 19 10:10:23 (none) user.warn otbr-agent[82]: 49d.17:03:08.020 [W] P-SpinelDrive-: Wait for response timeout

Du coup, l’agent tombe.

Une idée du souci ?
ps: j’ai la gateway V2

J’ai testé le firmware NCP-UART-HW avec zigbee2mqtt, cela fonctionne.
J’ai pu appairer un module.

Pour la version OTBR, je vais fouiller si je trouve des info. J’ai testé avec un débit différent du port série du module zigbee comme pu le voir dans des solutions mais toujours l’erreur.

Merci pour le partage

Salut @vdomos,

Les erreurs « Wait for response timeout » + crash du Spinel driver signifient que otbr-agent n’arrive pas à communiquer avec la puce radio EFR32 sur le port série.

Le fait que Zigbee2MQTT fonctionne est une bonne nouvelle : ça confirme que l’UART et le hardware sont OK.

Quelques pistes à vérifier :

  • Firmware EFR32 : le mode OTBR nécessite le firmware OT-RCP sur l’EFR32. Si le firmware actuel est le NCP ou RCP Zigbee, otbr-agent ne pourra pas dialoguer avec la radio. Le firmware EFR32 se flashe séparément avec ./flash_efr32.sh (option OT-RCP dans le menu). flash_install_rtl8196e.sh ne modifie que le côté Linux (kernel + userdata), pas la radio.

  • Baudrate : otbr-agent attend 115200 baud (configuré dans S70otbr). Si le firmware EFR32 a été compilé avec un autre baudrate, ça timeout.

  • Conflit sur le port série : vérifier qu’aucun autre processus n’utilise /dev/ttyS1 en même temps (serialgateway est normalement désactivé en mode OTBR, mais au cas où : ps | grep serial).

N’hésite pas si tu as d’autres questions !

La v2.1.0 vient de sortir avec quelques corrections notables :

  • Boothold : la commande boothold (reboot en mode bootloader depuis SSH) fonctionne maintenant de manière fiable — c’était aléatoire avant à cause d’un conflit de cache MIPS

  • LED OTBR : en mode Thread, la LED status s’allume quand le réseau Thread est actif

  • Persistance Thread : un daemon surveille le dataset Thread toutes les 30s et ne l’écrit sur flash que s’il a changé (en pratique, uniquement à la création/modification du réseau — pas d’usure inutile du flash)

  • Arrêt propre : tous les services sont stoppés proprement avant reboot

Mise à jour : ./flash_install_rtl8196e.sh gateway_ip

Effectivement, j’ai du manquer l’étape de flasher le module radio, j’ai un doute.
Je vais restester avec la dernière mise a jour

Merci

Bonjour,

J’ai re-flashé en v2.1.0, j’ai eu une erreur hier dans le build de dropbear,
C’est passé aujourd’hui en faisant une maj du repo.

Par contre, le password de root n’est plus ‹ root ›, je n’arrive plus à me connecter en ssh

Pas trouvé dans le code ou il pourrait etre déclaré.

Merci

Je regarde cela asap. Je pense savoir ce qui s’est passé. En attendant essaye de remplacer le fichier passwd dans le skeleton de userdata (34-Userdata/skeleton/etc) par celui d’une version antérieure (v2.0.0 par ex). Supprime userdata.bin et relance flash_install

Merci pour la solution.
J’ai pu m’y connecter et flasher en mode OTBR.

L’otbr-agent tourne

Reste plus qu’à ressortir mes ESP32-C6 pour tester

J’ai restauré le mdp par defaut dans le repo .
Tiens moi au courant de tes essais avec ot-br. Perso je n’ai que très peu de device matter et je n’ai jamais eu l’occasion de tester la passerelle gérant un réseau thread/matter « grandeur nature ». Donc tous les feedbacks me sont utiles :smiley:

Ce we je me suis fait trainé à Ikea par ma femme … un samedi, l’horreur bref …
Mais j’en ai profité pour regarder les produits domotique.

J’ai acheté une télécommande Rodret en Zigbee (que j’utilise du coup avec mon slzb-06MU) et ça fonctionne très bien (je n’avais pas trop de doute).

Comme j’ai flashé ma passerelle lidl en otbr, j’ai voulu tester ça et j’ai pris 2 produits matter:

  • Un capteur d’ouverture MYGGBET
  • Un capteur de température TIMMERFLOTTE
    Les 2 sont des matter (toute la nouvelle gamme Ikea l’est) et je n’ai eu qu’un problème pour l’appairage avec la passerelle Lidl flashé, via mon tel et l’app Home Assistant Companion:

Le QR Code ne marche pas, ça indique simplement un laconique « Une erreur est survenue » sans aucun détail … Le code lui a fonctionné et les 2 devices sont bien remontés dans HA, c’est ultra cool :wink: Merci au dev.

A noter une chose que je n’ai pas vu dans la doc (je suis peut-être simplement passé à côté) c’est que dans l’app companion de HA, j’ai dû aller dans Paramètres → Application Companion → Dépannage → Synchroniser les identifiants Thread … Sinon j’avais la même erreur avec le code qu’avec le QR Code.

Pour ma part, je teste la passerelle en mode otbr, mais des module esp32 supportant le Thread.

J’en avais déjà testé avec un otbr sur RPi et 2 modules flashé sous esphome openthread.
Et j’avais reussi à les inclure dans HA avec Esphome.

Les modules un esp32H2 et un esp32C6 sont bien vu par la passerelle Lidl, je peux les pinger.


> router table
| ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC     | Link |
+----+--------+----------+-----------+-------+--------+-----+------------------+------+
|  0 | 0x0000 |        6 |         1 |     3 |      3 |  19 | 162788fa137f9c80 |    1 |
|  6 | 0x1800 |        0 |         1 |     2 |      2 |   0 | 82bd294005b72315 |    1 |
| 27 | 0x6c00 |       63 |         0 |     0 |      0 |   0 | e6182446c15eb916 |    0 |

Done


> srp server host
esp32h2-01.default.service.arpa.
    deleted: false
    addresses: [fd6c:b1e6:5fa4:1:feb2:9fae:abe2:81f2]
    lease: 7200
    key-lease: 680400
    remaining lease: 7091.673
    remaining key-lease: 680291.673
esp32c6-01.default.service.arpa.
    deleted: false
    addresses: [fd6c:b1e6:5fa4:1:6b8a:4dfc:eff:7b8a]
    lease: 7200
    key-lease: 680400
    remaining lease: 7024.578
    remaining key-lease: 680224.578
Done


> ping fd6c:b1e6:5fa4:1:feb2:9fae:abe2:81f2
16 bytes from fd6c:b1e6:5fa4:1:feb2:9fae:abe2:81f2: icmp_seq=2 hlim=255 time=38ms
1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 38/38.000/38 ms.
Done

> ping fd6c:b1e6:5fa4:1:6b8a:4dfc:eff:7b8a
16 bytes from fd6c:b1e6:5fa4:1:6b8a:4dfc:eff:7b8a: icmp_seq=3 hlim=255 time=40ms
1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 40/40.000/40 ms.

Par contre impossible de les inclure dasn HA, si esphome les découvre, à l’ajout de la clé, HA n’arrive pas à les joindre.

Pense pas que le souci vienne de la passerelle Lidl.
Je vais continuer à fouiller et je suis preneur d’info. si d’autres sont passés par là

Bizarre,car pour moi l’association via QR code marche parfaitement. Ma checklist perso:
1/ Coté HA :

S’assurer de la bonne intégration, dans cet ordre, de :

  • Open Thread Border Router (URL : http://<IP_PASSERELLE>:8081)

  • Thread (auto-détecté après l’ajout d’OTBR) — le réseau Thread créé par la passerelle doit apparaître comme « Réseau favori » dans la configuration Thread de HA

  • Matter — sur HAOS/Supervised, Matter Server est inclus. Sur HA Core (Docker), il faut lancer le container Matter Server séparément (le Docker Compose du repo le fait automatiquement sur localhost:5580)

2/ Device Matter en mode Association

3/ HA Companion : Téléphone avec activation du WiFi sur 2.4 GHz sur le même subnet que la passerelle. Bluetooth activé. En cas de doute (pré-existence d’un ancien réseau Thread) aller sur Paramètres/Application Companion/Dépannage/Synchroniser les identifiants Thread.

L’ajout d’un matériel via Matter et QR code devrait fonctionner. La configuration sans QR code également.

Si les devices sont visibles via ot-ctl router table et que le ping fonctionne, la passerelle fait son travail — le réseau Thread est opérationnel.

Le problème est probablement côté intégration ESPHome/HA. Quelques pistes :

  1. mDNS/DNS-SD : vérifier que le service est publié sur le réseau local. Depuis le PC :

    avahi-browse -art | grep <nom_device>
    

    Si le device n’apparaît pas, c’est que la chaîne SRP → DNS-SD proxy ne fonctionne pas correctement.

  2. SRP server : sur la passerelle, vérifier que le device est bien enregistré :

    ot-ctl srp server host
    ot-ctl srp server service
    
  3. ESPHome + Thread est encore assez récent — vérifier la version d’ESPHome et les logs côté device. Certaines versions nécessitent une config spécifique pour Thread.

Je pense que c’est un sujet ESPHome plutôt que passerelle — ça vaudrait le coup de poser la question sur le Discord ESPHome.

Pour info une nouvelle release v2.1.2 vient de sortir. L’historique des changelogs est ici.