[TUTO] Hack de prises wifi Chacon-DiO et intégration dans HA à l'aide d'ESPHome

Bonjour,

Dans cet article, je vais vous expliquer comment hacker des prises connectés WiFi de la marque Chacon (trouvables à Casto et identiques avec un rebadgage différent pour : Edisio chez Leroy Merlin et Essentiel B chez Boulanger) pour pouvoir les intégrer très facilement dans son environnement HA à l’aide d’ESPHome (je n’expliquerais pas comment installer et prendre en main cet add-on, il existe déjà tout un tas d’articles très bien fait sur le sujet :slight_smile: ), ou pour en faire tout autre chose et être beaucoup plus libre dans l’utilisation de ces prises !

Ici, je parle du modèle simple de ces prises (le modèle on/off et non celui qui embarque un « power meter »). Modifier une prise avec l’option « power meter » avec le programme décrit dans cet article fonctionnera très bien (à la condition de déclarer la bonne famille d’ESP et de réaffecter les bons GPIO), mais vous perdrez la fonctionnalité de mesure de puissance (J’expliquerais, dans un autre article, comment fonctionne la partie mesure de courant et sont programme pour afficher ces données dans HA).

Avant de commencer, je tenais à signaler que depuis fin 2024, il est maintenant possible d’utiliser les prises Chacon-DiO dans HA avec un Add-On (voir ici : Chacon DiO - Home Assistant). Je ne sais absolument pas ce que vaut cet add-on car je n’ai pas eu l’occasion de le tester. Et semble être une bonne piste pour ceux qui sont frileux de mettre les mains dans du Hardware :slight_smile:


Avertissements :
Intervenir sur un appareil qui fonctionne sur secteur présente des risques d’électrocution et d’incendie. Vous devez être formés ou, à minima, savoir ce que vous faites. En cas de doute, d’absence de formation ou d’expérience, n’intervenez pas sur un appareil qui fonctionne avec le secteur. Vous êtes seul responsables de vos actes.

Il est également important de préciser que les systèmes décrits dans cet article ne présentent pas d’éléments d’isolation entre le secteur et la basse tension. Il est donc formellement interdit d’intervenir sur ces systèmes lorsqu’ils sont reliés au secteur.

Ouvrir l’appareil peut faire perdre la garantie. Téléverser un nouveau programme dans la prise fera définitivement perdre les fonctions initiales du constructeur et, les applications prévues par les constructeurs n’auront plus accès à cette prise, l’opération est irréversible, vous êtes prévenus !


Pour commencer, il faudra se munir d’un tournevis à tête triangulaire (ou à tête plate dont la longueur sera identique à celle de l’une des arrêtes de la forme triangulaire).


Les modèles basiques embarquent une électronique vraiment très simple dont un ESP32-S2. Le choix du S2 est judicieux, il s’agit d’une famille spécialement conçue pour les systèmes embarqués. J’y ai relevé rapidement et grossièrement un schéma :

Globalement, nous avons un étage de protection avec une varistance (RV1) et une résistance fusible (F2) de 22Ω.
À la suite de ça, nous avons un redresseur mono-alternance constitué de deux diodes (D1 et D5) et ses organes de filtrage (EC1, L1 et EC2).
Le redresseur alimente un convertisseur type « step down » non isolé (U1 : BP2525) et ses composants annexe pour abaisser la tension à 5V. Cette tension sera utilisée pour alimenter le relais de puissance.
On retrouve un autre régulateur type « LDO » (U2) et ses composants de filtrage pour alimenter l’ESP32-S2 en 3.3V.

Enfin, un simple transistor NPN (Q1 : S8050), sa résistance de pull down (R07), de limitation (R7) et diode de roue libre (D2) permettent au μC de piloter le relais.

Dans le système, nous retrouvons deux cartes électroniques :
La carte blanche, qui accueille l’ESP32-S2, une flash de 4Mo (P25Q32H), un quartz de 40MHz et une antenne 2,4GHz.
La carte verte accueille, elle, le reste des composants décrits plus haut.

Cette méthode permet au constructeur de changer très facilement de µC, au besoin, et sans devoir revoir le design de l’ensemble du système électronique (et/ou de pouvoir utiliser la même carte µC pour d’autres systèmes). On va donc avoir accès très facilement aux broches du µC pour y téléverser un nouveau programme, y brancher un autre capteur ou carrément y installer le µC de son choix (pourquoi ne pas y installer un ESP32-C6 pour ajouter du ZigBee/Thread par exemple ?!). Mieux encore, il nous a laissé les pastilles de connexion avec le nom des broches sérigraphiés pour téléverser un programme. Nous aurons besoin des broches RT, TX, GPIO0, VCC et GND de l’ESP32.

Ce qui nous intéressera le plus ici, c’est qui est connecté à quoi pour reprogrammer le μC ! Et pour cette carte blanche (dont la ref : RF0034PLCG VC) nous avons :

GPIO12 : Led Bleu
GPIO13 : Led Rouge
GPIO10 : Bouton
GPIO33 : Relais

(Les cartes blanches à la Ref : « RFM8266W VB1 » (pour les prises qui ont le mode « power meter » par exemple) embarquent des ESP8266 et le pinout sera : GPIO13 : Led Bleu / GPIO2 : Led Rouge / GPIO16 : Bouton / GPIO12 : Relais).

Parfait, à partir de là et à l’aide d’un convertisseur série de votre choix (ex : FT232, etc …), nous allons nous connecter sur les broches RX et TX de l’ESP.

Il faudra connecter les broches de la façon suivante :

Convertisseur série ----> ESP32

[ RX ] -----------------------> [ TX ]
[ TX ] -----------------------> [ RX ]
[3.3V] -----> [bouton] -----> [VCC]
[GND] ------------------------> [GND]
[GND] -----> [bouton] -----> [GPIO0]

J’ai inséré deux interrupteurs entre le convertisseur série et l’ESP32.
L’interrupteur entre l’alimentation permet de redémarré facilement l’ESP32.
L’interrupteur sur GPIO0 permet de faire basculer le mode du micro-contrôleur en mode téléversement ou exécution du programme.

Au démarrage, lorsque la broche GPIO0 est flottante, l’ESP va exécuter normalement le programme installé dans sa mémoire Flash.
En revanche, au démarrage de l’ESP et lorsque sa broche GPIO0 est tirée vers la masse, il se met en mode téléversement et va attendre la transmission d’un programme compilé sur la liaison série (RX/TX).
Une fois le programme téléversé, il faudra re-basculer (à l’aide du bouton) la broche GPIO0 en flottante (non connectée) et redémarrer l’ESP32, le programme fraichement installé devrais s’exécuter.

À partir d’ici, vous êtes en mesure de téléverser n’importe quel programme depuis l’IDE ou la plateforme de votre choix (Exemple : Arduino IDE 2, ESP IDF, etc …).

Pour la suite de cet article, je vais vous expliquer très simplement comment faire fonctionner cette prise avec ESPHome. Je pars du principe que vous avez déjà installé l’add-on et que vous êtes plus ou moins familier avec ce dernier, si vous ne l’êtes pas, vous verrez, c’est très simple ! :smiley:


Accédez à l’interface utilisateur web de ESPHome, créé un nouveau device (1), lisez les instructions et cliquez sur continue (2).

L’interface vous demande de nommer votre nouvel appareil (3), cliquez sur next (4).

Choisissez le bon µC. Ici, ce sera l’ESP32-S2 (5).

Copiez la clé de chiffrement, vous en aurez besoin par la suite (et si vous avez oublié cette étape, ESPHome vous l’explique très bien : You can find the key later in the device menu), cliquez sur skip (6).

Maintenant, cliquez sur edit (7). Ici, vous pourrez y écrire votre configuration YAML.

Voici mon fichier de configuration YAML, vous pouvez l’utiliser à votre guise.

esphome:
  name: "socket-10"
  friendly_name: "socket-10"
  compile_process_limit: 2 # Limite la charge du CPU pour ne pas faire planter HA lors de la generation et compilation de code de l'add-on ESPHome / Permets aux RPI avec peu de ressources de compiler / Paramametre = Nb de Coeurs a mettre à dispo (Exemple : 2 = 2 cœurs à mobiliser sur les 4).
  on_boot:
    priority: 600
    then:
      - logger.log: "Démarrage : clignotement des LED pendant 10 secondes"
      - repeat:
          count: 10
          then:
            - output.turn_on: led_red
            - output.turn_off: led_blue
            - delay: 500ms
            - output.turn_off: led_red
            - output.turn_on: led_blue
            - delay: 500ms
      - output.turn_off: led_red
      - output.turn_off: led_blue

esp32:
  board: esp32-s2-saola-1
  framework:
    type: arduino

# Activer les logs
logger:

# Activer l'API Home Assistant
api:
  encryption:
    key: "???????????????????????????????????????????????????"

ota:
  - platform: esphome
    password: "???????????????????????????????????????????????????"
                       

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # IP manuelle
  manual_ip:
    static_ip: 192.168.1.???
    gateway: 192.168.1.1
    subnet: 255.255.255.0

  # Activer le point d'accès de secours
  ap:
    ssid: "Socket-10 Fallback Hotspot"
    password: !secret ap_wifi_password

captive_portal:

# Configuration des sorties
output:
  - platform: gpio
    pin:
      number: 13   # GPIO13, sortie pour la LED rouge
      inverted: true
    id: led_red

  - platform: gpio
    pin:
      number: 12   # GPIO12, sortie pour la LED bleue
      inverted: true
    id: led_blue

# Variable pour suivre l'activation manuelle
globals:
  - id: manual_activation
    type: bool
    restore_value: no
    initial_value: 'false'

# Configuration du relais
switch:
  - platform: gpio
    pin:
      number: 33    # GPIO33, sortie pour le relais
      inverted: false
    name: "Socket (On/Off)"
    id: socket_switch
    on_turn_on:
      then:
        - if:
            condition:
              - lambda: 'return id(manual_activation);'
            then:
              - output.turn_on: led_blue   # Allumer la LED bleue si activation manuelle
            else:
              - output.turn_on: led_red    # Allumer la LED rouge si activation via Home Assistant
              - output.turn_on: led_blue   # Allumer la LED bleue si activation via Home Assistant
    on_turn_off:
      then:
        - output.turn_off: led_red         # Éteindre la LED rouge
        - output.turn_off: led_blue        # Éteindre la LED bleue
        - globals.set:
            id: manual_activation
            value: 'false'                 # Réinitialiser la variable d'activation manuelle

# Configuration du bouton
binary_sensor:
  - platform: gpio
    pin:
      number: 10    # GPIO10, entrée pour le bouton
      inverted: true
    name: "Socket Button"
    id: socket_button
    on_press:
      then:
        - globals.set:
            id: manual_activation
            value: 'true'                  # Marquer l'activation comme manuelle
        - switch.toggle: socket_switch     # Basculer l'état du relais

Vous allez pouvoir coller la clef de chiffrement dans :
api: encryption: key: " "

Vous allez également pouvoir définir un MDP pour ota.

Ici, j’utilise des variables « secrètes » (wifi_ssid, wifi_password, ap_wifi_password), ce qui m’évite de devoir les réécrire pour chaque appareil, n’oubliez pas de modifier ces variables avec vos paramètres.

Je décide également d’attribuer une IP fixe au device (mais vous pouvez très bien passer par le processus DHCP, ce qui limite les erreurs). Si vous configurez plusieurs devices, n’oubliez pas d’attribuer des IP différentes ! Si deux devices partagent la même IP, ça causera des problèmes.

Enfin, je préfère compiler les programmes à destination de l’ESP depuis la machine qui héberge HA.
C’est un processus qui demande beaucoup de ressources au CPU et si votre RPI (ou autre) ne peut pas suivre, il occupera toutes ses ressources. Il risque de se produira un crash et la machine va redémarrer, ce qui est capable de corrompre les fichiers des devices en cours de compilation (c’est du vécu).
Pour éviter ceci, j’utilise « compile_process_limit: 2 », ce qui permet de limiter le nombre de ressource attribuées à la compilation. Le paramètre indique le nombre de cœurs à mobiliser pour cette tâche.
Compiler un programme demandera donc plus de temps, mais va garantir la stabilité du système.

Une fois terminé, cliquez sur SAVE.

Nous allons donc vérifier qu’il n’y a pas d’erreur dans le fichier de config, cliquez sur les " petits points de votre device (8) et sur Validate (9), un terminal va s’ouvrir.

Si tout se passe bien, le terminal vous indique « INFO Configuration is valid! ».
Cliquez sur install (10).

Cliquez sur Plug into this computer (11) (vous pourrez installer une nouvelle config YAML après cette première installation, si votre device est bien connecté au wifi).

Cliquez sur « preparing dowload », c’est ici que va commencer le processus de compilation du programme et peut prendre un peu de temps.

Une fois le fichier prêt, cliquez sur Download project (12), enregistrez le téléchargement (13), ouvrez ESPHome Web (14) et fermez la petite fenêtre (15).

Arrivé ici, prenez votre prise connecté où est installé votre module de communication série, faites en sorte qu’un état bas soit appliqué sur le GPIO0 (via l’interrupteur) et branchez le tout à votre ordinateur. L’ESP devrait être sous tension et démarré sur le mode téléversement. À partir de là, vous pouvez de nouveau laisser le GPIO0 flottant (en jouant sur l’interrupteur), une fois en mode téléversement, l’ESP ne re-basculera en mode normal qu’une fois après avoir été redémarré (avec GPIO0 en flottant).

Cliquez sur connect (16).

Ici, une fenêtre s’ouvre et liste les ports séries (port COM) disponibles, cliquez sur le port COM de votre convertisseur (17) puis sur connexion (18). Si aucun port série ne s’affiche ou qu’il n’y a pas le bon port série disponible, c’est que votre pc ne reconnait pas votre convertisseur (regarder au niveau du driver) ou que vos branchements (entre convertisseur et esp) ne sont pas bons (reprendre le début du tutoriel).

Cliquez sur install (19).

Choisissez le fichiez précédemment téléchargé (20) puis sur install (21).

L’installation devrait prendre moins de 2min !

Une fois l’installation terminée, vous devrez redémarrer votre ESP (assurez-vous que votre GPIO0 ne soit plus reliée à la masse, sinon l’ESP ne pourra pas faire de démarrage en mode normal). Si votre installation est fonctionnelle, le statut de votre device devrait être à « ONLINE ». Vous allez également recevoir une notification de découverte de nouvel appareil, cliquez sur « Check it out » (22).

Ajoutez votre nouveau device à votre environnement HA (23).

Félicitations, vous venez de hacker votre première prise connectée et l’avez installé dans votre environnement HA !!! :smiley:

J’espère que ce partage d’expérience vous aura plus ! :slight_smile:

Je reviendrais très vite avec un autre tuto, expliquant comment exploiter les prises du même constructeur avec l’option « power meter » sous ESPHome.

À bientôt et bonne bidouille,
Seb

4 « J'aime »