[Tutoriel] Autopsie du matériel Lidl

[UPDATE] 2021/03/07
Hello,

Je comptai faire ça ce week-end mais j’ai pas pu attendre !

Le but de ce projet est d’utiliser la gateway Lidl/Tuya en tant que coordinateur zigbee distant avec le plugin « zigbee » sur un même réseau local ou de façon distante, tout en aillant la main sur l’inclusion/exclusion des modules via le plugin.

Pour commencer il vous faut :

NE PAS BRANCHER le TTL EN 5V :boom:
Et ne pas brancher l’alimentation de la passerelle l’adaptateur TTL est suffisante !

Pour accéder au terminal via le port serie il faut utiliser minicom, je le fait depuis ma Ubuntu (c’est aussi possible avec un raspberry)

sudo apt install minicom -y

Avant tout il faut voir sur quel port série vous êtes
Chez moi se sera ttyUSB0

Configurer minicom :
dans votre terminal taper # minicom -s

Capture d’écran de 2021-02-03 13-40-46

configurer le port série :

à par le Port série, mettre les même valeur que sur le screen ci-dessous
Capture d’écran de 2021-02-03 13-41-25

Enregistrer votre configuration et faite sortir
Capture d’écran de 2021-02-03 13-57-31

Vous vous retrouverez ici, si tout c’est bien passé
Capture d’écran de 2021-02-03 13-59-48


Il nous faut trouver le mot de passe root, et pour cela nous devons extraire les clés KEK et AUSKEY

Donc en restant appuyé sur ESC tout en branchant la gateway, on se retrouve dans le bootloader RealTek

Capture d’écran de 2021-02-02 22-05-36

Ces commandes lit la valeur dans la mémoire flash de la RAM, elle nous permet de récupérer une première clé chiffrée appellé KEK

    FLR 80000000 401802 16 
    DW 80000000 4

Capture d’écran de 2021-02-02 22-09-41

Notez la ligne de sortie, c’est votre KEK.

Nous devons également récupérer la clé chiffrée appellé AUSKEY
taper les commandes suivantes:

   FLR 80000000 402002 32 
   DW 80000000 8

Capture d’écran de 2021-02-02 22-10-50

Notez les deux lignes de sortie. C’est votre AUSKEY crypté.

récupérer maintenant le scrypt python qui nous permettra de récupérer le mot de passe root

ici
source: https://paulbanks.org/projects/lidl-zigbee/root.html

hha@hha-XPS-13-9360:~/lidl$ wget https://paulbanks.org/download/files/lidl-zigbee/lidl_auskey_decode.py
hha@hha-XPS-13-9360:~/lidl$ ls
lidl_auskey_decode.py
hha@hha-XPS-13-9360:~/lidl$ sudo chmod +x lidl_auskey_decode.py

lancer le script python

Attention le script fonctionne uniquement avec python3
vérifier les version de python que vous avez

hha@hha-XPS-13-9360:~$ update-alternatives --list python
/usr/bin/python2.7
/usr/bin/python3.6

Vous pouvez aussi définir la version à utiliser par défaut

hha@hha-XPS-13-9360:~$ update-alternatives --config python
Il existe 2 choix pour l'alternative python (qui fournit /usr/bin/python).

  Sélection   Chemin              Priorité  État
------------------------------------------------------------
* 0            /usr/bin/python3.6   2         mode automatique
  1            /usr/bin/python2.7   1         mode manuel
  2            /usr/bin/python3.6   2         mode manuel

Appuyez sur <Entrée> pour conserver la valeur par défaut[*] ou choisissez le numéro sélectionné :

suivez les indications comme sur le screen

Root password: b’mGZDdzkfz’

vous avez maintenant votre mot de passe —> mGZDdzkfz
pensez à ne pas copier le reste


redémarrer la gateway LIDL
loguez vous en root avec le mot de passe décrypté

ssh root@192.168.x.x -p 2333
tuya-linux login: root
Password: 
Tuya Linux version 1.0
Jan  1 00:00:16 login[120]: root login on 'console'
#

Si vous avez ce message

ssh: connect to host 192.168.10.168 port 2333: Connection refused

Vous devez vous connecter à votre passerelle LIDL via le port série et supprimer le fichier /tuya/ssh/cnt
reprenez les étapes prétendante pour accéder à la passerelle via votre câble UART.

rm /tuya/ssh/cnt

Une vu des processe qui tourne

Mem: 12508K used, 15384K free, 0K shrd, 624K buff, 5576K cached
CPU:   1% usr   0% sys   0% nic  97% idle   0% io   0% irq   0% sirq
Load average: 1.41 1.21 0.62 1/46 437
  PID  PPID USER     STAT   VSZ %MEM %CPU COMMAND
  418   120 root     R     1292   5%   2% top 
  234   215 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  236   235 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  237   235 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  249   235 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  265   235 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  264   235 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  235   234 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  238   235 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  259   235 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  266   235 root     S     5084  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  248   234 root     S     5008  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  251   250 root     S     5008  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  250   248 root     S     5008  18%   0% ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cf
  120     1 root     S     1300   5%   0% -sh 
    1     0 root     S     1292   5%   0% init      
  219   215 root     S     1292   5%   0% /bin/sh ./log_detect.sh /tmp/tuya.log 
  230   215 root     S     1292   5%   0% /bin/sh ./process_monitor.sh /tuya /tu
  109     1 root     S     1292   5%   0% /bin/sh /tuya/ssh_monitor.sh 
  147     1 root     S     1288   5%   0% udhcpc -i eth1 -s /tuya/udhcpc.script uya/def.cfg 
  266 root      5084 S    ./tyZ3Gw /tuya/tuya_user1 /tuya/def.cfg

y a pas mal de chose à découvrir

du coup on va :

  1. Installez un port série et programmer la passerelle TCP/IP.
  2. Désactiver les applications Tuya
  3. Configurez la passerelle TCP/IP pour qu’elle démarre au boot

à télécharger le fichier serialgateway.bin (PAS DEPUIS LA PASSERELLE)
Passerelle série compilée pour MIPS (LX) 47 ko (code source)

wget https://paulbanks.org/download/files/lidl-zigbee/serialgateway.bin
ls serialgateway.bin 
serialgateway.bin

On transférer le fichier serialgateway.bin vers la passerelle, en mettant votre adresse IP avec cette commande

cat serialgateway.bin | ssh -p2333 root@192.168.x.x "cat >/tuya/serialgateway"

on déplace le script de démarrage de tuya

if [ ! -f /tuya/tuya_start.original.sh ]; then cp /tuya/tuya_start.sh /tuya/tuya_start.original.sh; fi

On remplace le script de démarrage de tuya par serialgateway

cat >/tuya/tuya_start.sh <<EOF
#!/bin/sh
/tuya/serialgateway &
EOF
chmod 755 /tuya/serialgateway

on reboot et c’est terminé
on a maintenant une coodinateur zigbee type EZSP
accessible via le port 8888 socket://adresse_ip:8888

Voyons voir ce qu’on peut faire dans le plugin zigbee !

Bon ba pour l’intégration c’est pas compliqué !

le daemon tourne toujours et c’est good dans les log !

[2021-02-03 00:25:50][INFO] : Start zigbeed
[2021-02-03 00:25:50][INFO] : Log level : debug
[2021-02-03 00:25:50][INFO] : PID file : /tmp/jeedom/zigbee/deamon_2.pid
[2021-02-03 00:25:50][INFO] : Device : socket://192.168.10.56:8888
[2021-02-03 00:25:50][INFO] : Apikey : X6LlSgVw6ShTNQvWrsGfqekxUSw7FNU6
[2021-02-03 00:25:50][INFO] : Callback : http://127.0.0.1:80/plugins/zigbee/core/php/jeeZigbee.php
[2021-02-03 00:25:50][INFO] : Cycle : 0.3
[2021-02-03 00:25:50][INFO] : Controller : ezsp
[2021-02-03 00:25:50][INFO] : Channel : 20
[2021-02-03 00:25:50][INFO] : Data folder : /var/www/html/plugins/zigbee/data/2
[2021-02-03 00:25:53][INFO] : Find device : socket://192.168.10.56:8888
[2021-02-03 00:25:54][INFO] : LOADER------Import de la configuration specifics.danfoss
[2021-02-03 00:25:54][INFO] : LOADER------Import de la configuration specifics.danfoss.details
[2021-02-03 00:25:54][INFO] : LOADER------Import de la configuration specifics.develco
[2021-02-03 00:25:54][INFO] : LOADER------Import de la configuration specifics.develco.details
[2021-02-03 00:25:54][DEBUG] : Writing PID 4586 to /tmp/jeedom/zigbee/deamon_2.pid
[2021-02-03 00:25:54][DEBUG] : Init request module v2.21.0
[2021-02-03 00:25:54][DEBUG] : Starting new HTTP connection (1): 127.0.0.1:80
[2021-02-03 00:25:54][DEBUG] : http://127.0.0.1:80 "GET /plugins/zigbee/core/php/jeeZigbee.php?apikey=X6LlSgVw6ShTNQvWrsGfqekxUSw7FNU6 HTTP/1.1" 200 0
[2021-02-03 00:25:54][DEBUG] : Using selector: EpollSelector
[2021-02-03 00:25:54][DEBUG] : [start_zigbee] Init zigbee network with config : {'database_path': '/var/www/html/plugins/zigbee/data/2/network_ezsp.db', 'device': {'path': 'socket://192.168.10.56:8888', 'baudrate': 115200}, 'network': {'channel': 20}, 'ezsp': {'CONFIG_APS_UNICAST_MESSAGE_COUNT': 12, 'CONFIG_SOURCE_ROUTE_TABLE_SIZE': 16, 'CONFIG_ADDRESS_TABLE_SIZE': 8}}

j’ai intégrer un module (prise Lidl) rapidement et sans problème, c’est super réactif


2021/03/08

  • Upgrade firmware et désactivation de la rétention ssh

Ce que fait le script :

  • Il désactive la rétention coté ssh
  • Télécharge et installe le dernier serialgateway
  • Télécharge et installe le firmware EZSP 3.7.8.0

Le risque de brique est faible voir nul,
Mais vous serez le seul responsable, si vous décidez de sauter le pas !

L’installe se fait toute seul
Taper cette commande directement sur votre terminal et suivez les étapes comme sur la capture d’écran !

Il faudra spécifier la version de votre EZSP, si elle a pas été mise à jours il faudra mettre « V7 » dans l’ étape du script. pour info c’est pas visible sur le screenshot !

avant de commencer il faut stoper le daemon du plugin zigbee si votre box Lidl est lié à jeedom

Capture d’écran de 2021-03-08 13-29-32

 wget -q https://dl.dropbox.com/s/605klwppawygh54/upgrade-lidl-beta_0.1.sh && chmod +x upgrade-lidl-beta_0.1.sh && ./upgrade-lidl-beta_0.1.sh

Faite moi un retour si la mise à jour a fonctionné chez vous et si vous aviez déjà connecter la box avec l’application Lidl auparavant.

Un grand merci a Paul Banks et Lasse Bjerre !

Have fun

18 « J'aime »