Gateway SLS sous Home Assistant

Bon, ça fait un moment que sur les channels domotique on parle d'une nouvelle gateway zigbee: la SLS. Du coup, un petit groupe de curieux, on s'est lancés dans l'aventure, et aventure, c'est le terme!
Déjà, il a fallu commander et surtout recevoir le matériel pour la construire, car oui, la SLS, c'est du DIY! Un certains nombre de semaines plus tard, et des passages par différentes personnes, la gateway, enfin les composants, arrivent chez moi.

Ça en fait des composants.

Première étape: souder les composants sur le PCB. Rien de bien particulier pour des gens avec de l'expérience dans les composants de surface. Il suffit de se baser sur le schema que l'on trouve ici: http://modkam.ru/wp-content/uploads/2019/11/Mi_Gateway_Shield03.jpg que je remet ci-dessous si besoin. Si besoin, on peut trouver des instructions et des images ici: https://modkam.ru/?p=1342 (mais passez par un site de traduction si le Russe n'est pas votre fort).

Ensuite, le PCB est fait pour être monté dans une gateway Xiaomi. Premier petit problème: le bouton qui vient derrière le bouton de la gateway est trop long. Bon, un petit coup de lime, ou reprendre celui de Xiaomi va résoudre le problème.

La SLS montée et en place dans une gateway Xiaomi

Étape importante: connecter les antennes externes. Je n'avais pas remarqué au début, mais les modules sont soudés pour utiliser d'office les antennes externes.

Flash de l'ESP32

Bon, maintenant la partie plus compliquée: le software. Bon déjà, sous Windows 10, l'ESP32 n'est pas détecté correctement. Ca commence bien....

Un reboot plus tard sous Linux, et on recommence.

Première étape, appuyer sur le bouton boot, puis connecter le cable USB, dans cet ordre. Ensuite, on lance le script que l'on trouve ici: https://github.com/slsys/Gateway . Téléchargez le repo, puis ouvrez le sur votre machine. Il vous faudra ouvrir le dossier rom et désipper le dosser 20210124_full.7z ou date_full.7z.

Dans ce dossier vous trouverez un dossier nommé linux dans lequel vous devez ouvrir un terminal (sous la majorité des distributions linux, un clic droit puis ouvrir un terminal ici suffit. Ensuite, il faudra commencer par modifier le fichier Flash_16mb.sh afin de diminuer la vitesse de téléchargement qui pose problème (demandez moi pas comment je sais, j'ai cherché un moment). Remplacez le code par celui ci-dessous (remplacez le 921600 par 115200) :

python3 bin/esptool.py --chip esp32 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode qout --flash_freq 80m --flash_size detect 0xe000 ../firmware/boot_app0.bin 0x1000 ../firmware/bootloader_qout_80m.bin 0x10000 ../firmware/firmware.bin 0x8000 ../firmware/partitions16.bin

Bon, maintenant c'est l'heure de faire de la ligne de commande. Sous linux, par défaut les paquets python nécessaires ne sont pas installés:

sudo apt update
sudo apt install python3-pip
sudo pip install pyserial

Et maintenant, on peut passer à la partie du flash (enfin!). Toujours dans le dossier rom/linux tapez les commandes suivantes:

sudo chmod +x Clear.sh # permet de donner les droits d'execution au script
sudo chmod +x Flash_16mb.sh
sudo ./Clear.sh # on vide la flash de l'esp
sudo ./Flash_16mb.sh # on flash le code de la gateway

Si tout c'est bien passé, on peut passer a la configuration. Sinon, vérifiez vos soudures!

Configuration

Première étape: se connecter au wifi de l'ESP. Il se nomme zgwXXXX avec X des lettres et chiffres aléatoires.

Une fois connecté, la première étape sera de se connecter a notre réseau wifi.

Si vous êtes comme moi et que votre PC n'a du coup plus accès a internet, les menus seront un peu cahotiques. Trouvez celui qui se nomme Wifi. Là vous pourrez entrer le nom et mdp de votre réseau. Ensuite cliquez sur save, puis sur reboot.

Si vous avez entré des informations correctes, vous pourrez cherche l'adresse IP de votre gateway sur la page de configuration de votre routeur par exemple.

Dernière étape: entrez l'adresse IP que vous avez trouvé dans votre navigateur. Vous serez gratifiés de la page suivante:

Mais surement avec le ChipType sous Zigbee info qui sera vide.

Pour remédier a ça, allez dans Settings -> Hardware puis paramètrez votre gateway de la manière suivante (Merci a l'auteur de ce site):

Paramètre gateway

Il vous sera demandé de redémarrer la gateway.

Côté configuration on a fait le tour pour la base. Je vous laisse ensuite naviguer dans les menus pour trouver ce qu'il vous faut

Utilisation

Ajout d'un périphérique ZigBee

Bon, une passerelle Zigbee c'est bien beau, mais il faut lui ajouter des périphériques. Pour cela, ouvrez la page Zigbee -> Join.

Sur cette page cliquez sur Enable join vous devriez avoir cette page:

Join activé

Une fois le join activé, mettez votre périphérique en mode join (Vous trouvez les instructions sur la page zigbee2mqtt). Une fois détecté par la passerelle, il apparaîtra sur la page, avec une barre de chargement affichant l'état d'avancement.

Adoption en cours

Ensuite, soit le périphérique est tout de suite intérrogé, et là vous n'avez rien à faire:

Adoption réussie

Soit le périphérique n'est pas intérrogé, et vous devez appuyer sur le petit bouton play a coté de Start interview:

A ce moment il demandera d'appuyer sur le wakeup button, ce qui correcspond en général au bouton principal du device.

Et voilà, je n'ai pas rencontré d'autres subtilités pour le join. N'hésitez pas à partager votre expérience si certains device se comportent bizarrement, comme ca je pourrais les rajouter :).

Home Assistant

Maintenant, la partie intéressante. Pour moi, la gateway sera principalement utilisée par Home Assistant. Donc il faudra la rajouter au serveur mqtt de HA. La gateway support le device discovery, ce qui permettra d'automatiquement ajouter les device a HA.

Pour connecter la gateway au serveur MQTT, il faut aller dans Settings -> Link. Ensuite, on clique sur le menu MQTT Setup

A ce stade, on rentre les infos du serveur MQTT de Home Assistant et cochez Enable en haut. A vous de choisir si vous souhaitez les Retained states et le lwt. L'avantage de l'activer c'est que en cas de reboot de HA, les états seront restaurés. J'ai pas encore croisé de désavantage, donc je dirait que c'est une bonne chose à activer.

Prochaine étape: les régalges zigbee. Donc, on clique sur le menu Zigbee -> Config Les configs Channel et PanId ne doivent pas être touchés une fois le reseau en place (voir précédemment). Ce qui nous intéresse ce sont les MQTT messages options. Voici mes options: je vais faire le tour avec vous et vous expliquer ce que chacun fait.

  • MQTT Send Raw Command: permet d'envoyer la commande en clair dans le payload mqtt. Home assistant ne supporte pas cette option car il parse toujours un payload json.
  • MQTT Send parsed JSON (Default): Permet d'envoyer la commande en format JSON, et donc compatible avec HA.
  • MQTT Send parsed Attributes: Celui-là je cherche encore l'effet.
  • Use FriendlyName: Utilise le friendlyName, donc le nom que vous donnez au périphérique dans SLS, au lieu du nom ieee qui est un truc du genre 0xabcdef. Avantage: c'est plus lisible, vous pouvez remplacer un device sans toucher les automations HA, Defaut: si vous changez le friendly name, les automations sautent. Moi je le laisse, ça me permet d'avoir des périphériques avec des noms plus lisibles.
  • Send Cache States (Default) : Envoie régulièrement les états des capteurs meme s'ils n'ont pas changés.
  • Clear States: surtout utile pour les boutons: si coché, ca renvoie un état vide après chaque appui de bouton (comme fait par zigbee2mqtt). Avantage: si vous venez de zigbee2mqtt, cochez le, ça ne vous change pas les automations. Defaut: peut faire des automations plus lourdes (d'expérience) avec des conditions supplémentaires.
  • Add friendly name to payload: Rajoute le friendly name dans le payload. Pas utile pour HA.
  • Add transaction number to payload: Ajoute le numéro de l'intéraction entre le périphérique et la SLS. Pas utile de base.
  • Add model name to json payload: Ajoute le modèle dans le payload json. Utile pour HA
  • Home Assistant MQTT Discovery: Utilise la découverte automatique dans Home Assistant. A activer si vous l'avez.

Il ne vous reste qu'a sauvegarder vos paramètres. Vos périphériques devraient apparaitre dans Home Assistant dès qu'ils se mettent à jour (appuyez sur les interrupteurs etc).

Utiliser les LEDs de la gateway Xiaomi

Pour utiliser les leds, on va publier la couleur souhaitée sur le topic MQTT suivant ZigBeeXXXX/led avec le payload:

{"mode": "manual", "hex": "#FFFFFF"}

dans lequel il faut remplacer #FFFFFF par la valeur RGB que l'on souhaite.

Autres informations utiles

Consommation électrique: 1.2W dans la gateway Xiaomi leds éteintes.