U x I : Routeur Solaire pour gérer la surproduction photovoltaïque (DIY)

Modulaire — Flexible — Réactif
Version V3.04_UxI , remplacé par version V4.00_RMS

Pilotage depuis un SmartPhone ou un PC (navigateur Web)

Avec les panneaux solaires, dans une installation en autoconsommation, il est fréquent d’avoir de la surproduction d’énergie dont on ne sait que faire et qui est envoyée sur le réseau public. Une solution pour ne pas gaspiller cet excédent est de l’envoyer à un chauffe-eau électrique, un chauffage, une pompe de piscine…

Un rapide calcul, pour un chauffe-eau de 200l, équipé d’une résistance chauffante de 2400W, montre qu’il faut près d’une heure de chauffe, soit 2.3 kWh pour monter l’eau de seulement 10°.

200l*1000gr*4.18Joule*10°/3600s=2322 Wh = 2.3kWh

Chaque jour, c’est plusieurs kWh qu’il faut fournir au chauffe-eau. Pour un système classique, on effectue cela de nuit à un tarif réduit. En cas de surproduction dans la journée des panneaux photovoltaïques, il faut envoyer cette énergie au chauffe-eau. C’est une superbe batterie de stockage d’énergie. Mais, comme il est fréquent de n’avoir que quelques centaines de watts disponibles et non pas la puissance de 2400 w que demande la résistance du chauffe-eau en branchement classique, le routeur proposé ici ne fournit que cette puissance disponible.

Tableau des Versions

Différentes versions de routeur ont été décrites. La version 3.00_UxI remplace la version 2 devenue obsolète. Le hardware est inchangé, mais l’exploitation est plus simple et plus flexible.

VersionMesure courant / puissanceActionneursModulaireDomoticzMQTT / Home AssistantDescription
1Sonde Ampèremétrique
Monophasé
RelaisNonOuiNonRouteur Solaire. Mesure de Puissance avec un ESP32
2Sonde Ampèremétrique
Monophasé
Triac + RelaisNonOuiNonRéalisez un Routeur Solaire pour gérer la surproduction
3.04_UxISonde Ampèremétrique
Monophasé
Triac + RelaisOuiOuiOuiU x I : Routeur Solaire pour gérer la surproduction photovoltaïque
3.11_LinkyLinky
Monophasé ou triphasé
Triac + RelaisOuiOuiOuiRéalisez un Routeur Solaire avec un Linky
Voir à présent la version V4.00_RMS

Ce routeur propose deux types de contrôle de la puissance excédentaire :

  • à l’aide d’un Triac, agissant comme une vanne qui s’ouvre pour laisser passer la surproduction disponible en surveillant la puissance qui entre ou sort de la maison afin qu’elle soit nulle à l’aide d’une sonde de courant branchée derrière le compteur.
  • à l’aide de relais pour enclencher un moteur, une pompe

La régulation fine au Watt près, par Triac, ne fonctionne que pour les chauffe-eaux électriques ou les chauffages classiques dans lesquels se trouve une résistance électrique et un thermostat électro-mécanique pour contrôler la température. Les dispositifs à base d’électronique de contrôle doivent être alimentés en tout ou rien à l’aide de relais.

Schéma du routage de l’énergie excédentaire vers un Chauffe-Eau. Le routeur solaire agit comme une vanne ( le Triac) qui s’ouvre pour laisser passer la surproduction en surveillant la puissance active en entrée de la maison afin qu’elle soit nul.

Modularité

Système complet, Mesures et Actions, avec un seul ESP32

Le système se décompose en trois fonctions :
– la mesure de puissance au niveau du disjoncteur principal ou du Linky,
– le traitement à l’aide d’un microcontrôleur ESP32,
– les actionneurs avec un triac et des relais pour alimenter différentes charges.

Il peut s’éclater en différents modules pour s’adapter à des distances élevées entre le disjoncteur et les équipements à alimenter. De simples relais pilotables par Wifi peuvent également être contrôlés.

Système modulaire éclaté dans différents lieux de la maison.

Pour les détenteurs de serveurs de domotique comme Home Assistant ou Domoticz, les informations de puissance et d’état des actionneurs peuvent être envoyées pour y être traitées.

Matériels

Pour réaliser l’ensemble, il faut les matériels suivants:

Capteur du Courant

Transformateur de courant 100A/50mA

Pour mesurer le courant en entrée de la maison, on utilise un capteur de courant dans lequel on fait passer le fil de phase du secteur. En sortie, agissant comme un transformateur, il fournit un courant identique, mais 2000 fois plus faible. Ce courant est envoyé aux bornes d’une résistance et dont on mesure la tension générée.

Capteur de la tension

Transformateur 230V/6V (Aliexpress)

Pour mesurer la tension, on utilise un transformateur bobiné classique abaisseur de tension qui nous isole du secteur. Par exemple un 230v/6v. Il faut un modèle le plus petit possible, on ne prélève aucune puissance. Cela n’est plus très facile à trouver. Un transformateur, dit de sonnette, peut faire l’affaire.

Pour les détails de montage se référer à cet article.

Micro-Calculateur ou Microcontrôleur

ESP32 – Development Board

Pour effectuer les mesures de tension et les calculs, L’ESP32 est un microcontrôleur adapté à notre besoin. Il comprend :
– des entrées analogiques pour mesurer des tensions,
– des entrées/sorties numériques pour actionner un relais ou un triac si besoin,
– une bonne capacité de calcul
– une liaison WIFI pour faire du reporting à distance sur une page web ou un système de domotique.

Gradateur – Triac

Gradateur avec détection de zéro

Pour ajuster le courant à injecter vers le chauffe-eau, on utilise un gradateur de chez RobotDyn composé d’un Triac et d’un système de détection du passage à zéro de la tension. Il existe en 16A ou 24A et est disponible chez Aliexpress.
Attention, le refroidisseur d’origine du Triac est largement sous-dimensionné sachant qu’il devra fonctionner pendant plusieurs heures. Remplacez-le par un plus-grand en dessoudant et déplaçant le Triac. Pensez à raccorder le refroidisseur au fil de terre pour la sécurité.

Pour en savoir plus : https://f1atb.fr/triac-gradateur-pour-routeur-photovoltaique/

Présentation du routeur photovoltaïque U x I

Raccordement à l’ESP32

Schéma électrique complet – ESP32 Development Board 2*19 pins

Mesure

La mesure des 2 valeurs représentant la tension et le courant prend environ 150uS. En pratique, on prévoit sur une période de 20ms (1/50Hz) de prélever 100 couples de valeurs, ce qui donnera une bonne description de la tension à priori sinusoidale et du courant souvent chahuté par les alimentations à découpage.

Formules de calcul des puissances

Pour bien caler dans le temps chaque mesure, on utilise le compteur des micro-secondes de l’ESP32.

Toutes les 40 ms, on effectue :
– la mesure des tensions et courants durant 20ms
– une moyenne sur les dernières mesures pour lisser et réduire le bruit de mesure
– le calcul du courant efficace Ieff
– le calcul de la tension efficace Ueff
– le calcul de la puissance apparente Pva en kVA
– le calcul de la puissance active Pw en kW
– le cosinus φ

Configuration modulaire

Si une grande distance sépare le disjoncteur général pour la mesure de puissance et les appareils à piloter, il est possible d’éclater la structure entre plusieurs modules ESP32 qui échangeront les données par le WIFI.

En premier, on implante un module de mesure près du disjoncteur principal. Le Triac ou des relais ne sont pas nécessaires a priori, mais on peut en mettre si besoin de commander quelque chose à côté.

ESP32 en charge de la mesure de puissance uniquement

Près des dispositifs à piloter, on implante un ou des modules ESP32 avec un Triac ou des relais si besoin. Ils iront chercher les informations de puissance à l’entrée de la maison auprès de l’ESP32 chargé de la mesure.

Le même logiciel est à implanter dans les différents ESP32. Ils seront configurés à la mise en route.

ESP32 actionneur. Triac et relais en option

Page Web

Le code installé sur l’ESP32 comprend un serveur Web qui permet d’afficher sur une page, les différentes mesures ainsi que les courbes de la tension et du courant durant une période de 20 ms. Il suffit de rentrer l’adresse IP ou le ‘hostname.local ‘ de l’ESP32 dans le champ d’adresse de votre navigateur web.

Page principale – Accueil

En haut, une zone de menus pour choisir la page.

En dessous, l’heure (de France) fournie par le réseau.

Un tableau donne différentes valeurs mesurées ou calculées :

  • la tension efficace Ueff en Volts
  • le courant efficace Ieffen Ampère
  • la puissance apparente en VA, produit Ueff*Ieff
  • la puissance active Pw en Watt. C’est elle que vous payez. Pw>0 vous consommez sur le réseau. Pw<0 vous injectez sur le réseau
  • le cosinus(Phi), rapport entre la puissance active et la puissance apparente
  • l’énergie active soutirée depuis 0h en Wh
  • l’énergie active injectée depuis 0h en Wh

Un deuxième tableau, donne l’état courant des actionneurs. Ici, l’ouverture du Triac à 38% du temps. La régulation est en cours pour ajuster la puissance consommée/injectée de la maison autour de 0W. Un relais de chauffage est Off et une commande vers un relais externe de moteur de piscine est On.

Un premier graphe donne la puissance active en rouge et la puissance apparente en bleu-vert durant les 10 dernières minutes. Entre (0 et -1mn ) et (-4 et -10mn) on est en phase de régulation, la puissance active est proche de zéro. Entre -1 et -4mn on est en surproduction. On remarque que durant les phases de régulation, la puissance apparente est très importante et chahutée. C’est un comportement normal. Durant une demi-sinusoïde de 10ms, on consomme et on injecte de la puissance pour avoir un bilan nul de puissance active. Cela se traduit par de la puissance apparente élevée. Il n’y a pas de somme algébrique signée, c’est une somme de carrée. Voir la vidéo sur les unités électriques https://youtu.be/xHhURisycmA

Plus bas sur la page, deux autres graphes donnent la puissance active sur 48H et l’énergie quotidienne (Soutirée-Injectée) en Wh sur un an. Ce dernier est stocké en mémoire ROM de l’ESP32 pour ne pas être perdu en cas de coupure de courant.

Page données brutes

Cette page regroupe des données brutes de mesures collectées par le système.

Le graphe en rouge et vert donne la forme de la tension et du courant sur une période de 20ms. C’est le résultat de la mesure par l’ESP des entrées analogiques. Dans le cas de mesures effectuées par un ESP distant, ce sont les données distantes représentées ici.

Un tableau fourni des informations sur l’ESP32, pour suivre son fonctionnement. En particulier on surveille le niveau du WIFI afin qu’il ne passe pas en dessous des -80 dBm.

Page paramètres

Une page est dédiée principalement aux paramètres réseau.

L’adresse IP de l’ESP32 est définie par votre box internet (cocher la case DHCP) ou elle est fixée par vous-même.

Si pour obtenir les données de puissance, vous n’avez pas la sonde ampèremétrique et le transformateur 6V branchés sur cet ESP, mais un autre distant, cochez la case ESP UxI Externe et rentrez l’adresse IP de ce dernier.

Si vous souhaitez envoyer des données à Domoticz, mettez une période de répétition autre que 0 et remplissez les champs. Domoticz recevra la dernière puissance Active Pw (Soutirée – Injectée) connue.

Si vous souhaitez envoyer des données à Home Assistant via un broker MQTT, mettez une période de répétition autre 0 et remplissez les champs. MQTT recevra plusieurs topics precédés d’un prefix. Exemple :
– « UxI/pva » la puissance apparente en VA
– « UxI/pw » la puissance active en W signée
– « UxI/pws » la puissance active soutirée en W
– « UxI/pwi» la puissance active injectée en W
– « UxI/easj » l’energie active soutirée du jour en Wh
– « UxI/eaij » l’energie active injectée du jour en Wh

Et en option s’ils sont activés :

– « UxI/triac » l’ouverture du Triac entre 0 et 100%

– « UxI/action1 » état binaire 0 ou 1 de l’action1 ,action2 etc..

Extrait fichier mqtt.yaml avec un prefixe "UxI/"
- state_topic: "UxI/pva"
  name: "UxI PVA"
  unique_id: uxi_pva
  unit_of_measurement: VA
  device_class: apparent_power
- state_topic: "UxI/easj"
  name: "UxI E Soutirée "
  unique_id: uxi_easj
  unit_of_measurement: Wh
  state_class: total_increasing
  device_class: energy
- state_topic: "UxI/eaij"
  name: "UxI E Injectée "
  unique_id: uxi_eaij
  unit_of_measurement: Wh
  state_class: total_increasing
  device_class: energy
- state_topic: "UxI/pw"
  name: "UxI PW"
  unique_id: uxi_pw
  unit_of_measurement: W
  device_class: power
- state_topic: "UxI/pws"
  name: "UxI PW Soutirée"
  unique_id: uxi_pws
  unit_of_measurement: W
  device_class: power
- state_topic: "UxI/pwi"
  name: "UxI PW Injectée"
  unique_id: uxi_pwi
  unit_of_measurement: W
  device_class: power
- state_topic: "UxI/triac"
  name: "UxI Triac"
  unique_id: uxi_triac
  unit_of_measurement: '%'
- state_topic: "UxI/action1"
  name: "UxI Action1 Relais"
  unique_id: uxi_action1
Calibration

L’ESP en charge de la mesure de tension et du courant nécessite une calibration des valeurs mesurées pour s’adapter aux disparités des transformateurs, résistances etc. Commencer par la tension en mesurant votre tension secteur avec un voltmètre ou l’affichage du Linky et adapter le coefficient multiplicateur pour avoir la même valeur affichée sur la page d’Accueil. Un coefficient de 1000, correspond au schéma avec un transformateur de 6V. Baisser ce coefficient si la tension affichée est trop haute, montez-le si elle est trop basse.

Pour la calibration du courant, il est préférable de le faire lorsque la consommation de la maison est forte. On utilise la puissance apparente instantanée affichée en VA au niveau du Linky. On ajuste le coefficient pour avoir sur la page d’accueil des valeurs similaires à celle du Linky.

Sauvegarde

Lorsque l’on apporte des modifications à ces paramètres. Il ne faut pas oublier de les sauvegarder dans la mémoire ROM de l’ESP32 puis faire un ESP32 Reset pour que le système soit relancé avec les nouveaux paramètres.

Page actions

Cette page permet de configurer les actionneurs et de définir un planning de routage. Elle offre une grande flexibilité de configuration pour s’adapter aux divers besoins.

La première des actions est réservée au pilotage du Triac. Cocher la case pour l’activer. En cliquant sur + ou – on peut ajouter ou enlever des plages horaires. En déplaçant la souris horizontalement, on peut modifier les heures. Pour une plage horaire donnée, il y a 3 types d’action possible :

  • Triac forcé à Off
  • Triac forcé à On (100%)
  • Triac ouvert entre 0 et 100% si Pw (puissance active en entrée de maison) < Seuil à définir, Off si supérieure au Seuil. Seuil en général à 0.
SonOff Mini R2

Toutes les 200 ms, le logiciel augmente ou diminue la durée de conduction du Triac en comparant la puissance mesurée Pw au seuil fixé. Cela permet après plusieurs mesures de s’approcher de l’équilibre pour avoir une consommation/injection au niveau de la maison proche du Seuil (en général 0W) que l’on a fixé. Quand on augmente de 10% la durée d’ouverture, l’effet ne sera pas le même si vous avez une charge de 500W max connectée ou une charge de 3000W. Un curseur permet d’augmenter ou de réduire le gain de l’asservissement ou la réactivité de l’ensemble. En regardant l’historique de 10mn, on voit si la réaction à toute variation de consommation est lente ou trop rapide, engendrant une oscillation de la puissance active (courbe rouge).

Les autres actions permettent de piloter des relais branchés sur les sorties GPIO disponibles (sauf les GPIO32, GPIO33, GPIO35) ou de piloter un relais distant comme le SonOff Mini R2 https://f1atb.fr/sonoff-mini-installer-son-firmware-simplement-par-le-wifi/

Il faut remplir les différents champs :

  • Host: mettre « localhost » sans les «  » si le relais est connecté à cet ESP32 ou l’adresse IP du relais distant
  • Port: en général 80 pour une communication suivant le protocole http
  • On : pour un relais local mettre « gpio=17&out=1 » si l’on souhaite mettre à 1 la sortie GPIO 17. Pour un relais externe distant, mettre la commande demandée par le constructeur
  • Off: pour un relais local mettre « gpio=17&out=0&init=0 » si l’on souhaite mettre à 0 la sortie GPIO 17 et l’inialiser à 0 à la mise en route
  • Répet: répétition périodique en s si besoin de la commande. Avec 0 la commande est envoyée une seule fois au franchissement du seuil.

Pour chaque plage horaire, il y a 4 types d’action de routage :

  • Pas de contrôle: il ne se passe rien.
  • Off : on force l’état Off du relais
  • On: on force l’état On du relais
  • Pw< et Pw> : si la puissance active est inférieure à un seuil, le relais passe à On. Si la puissance active est supérieure à un autre seuil, le relais passe à Off. Attention, il faut que le seuil(off) – seuil(on) soit supérieur à la consommation de l’équipement connecté pour éviter un risque d’oscillation On/Off.

En fin de configuration, ne pas oublier de sauvegarder.

Chaque fois que vous sauvegardez, une nouvelle action vierge est proposée. Pour enlever une action, videz les champs.

Remarque CACSI

Attention, si vous avez signé un CACSI (Convention d’Autoconsommation Sans Injection), votre système interdit les injections de puissance sur le réseau public. Cela se traduit à un bridage par moment pour ne pas avoir de valeur de puissance négative (=injection) à l’entrée de la maison.

Il est impératif dans ce cas avec CACSI, d’utiliser le routeur avec un seuil de réglage des W au-dessus de zéro, par exemple la consommation talon de votre maison : 200W. Si vous passez en dessous de ce seuil et à condition que le système qui bride la sortie d’énergie vers ENEDIS ne soit pas encore actif, les W commenceront à être envoyés à votre chauffe-eau ou tout autre dispositif.

Montage

Montage

Dans une boite d’électricien, on installe :

  • La carte ESP32 (Development Board 2*19 pins) chez Aliexpress ou plus rapidement une carte 2*16 broches ESP 32 Wroom chez uPesy.fr)
  • Une alimentation 230V – 5V 1A DC pour l’ESP32
  • Un transformateur basse tension 230V – 6V AC pour mesurer la tension (Aliexpress)
  • Un gradateur 16A ou 24A de RobotDyn suivant la puissance du chauffe-eau (Aliexpress)
  • Sonde de courant 100A/50ma (Aliexpress)
    • Résistances R1 et R2 : entre 470 et 820 Ω 1/4 ou 1/8W
    • R3 : 24 Ω 1/4W
    • R4 : 24000 Ω 1/4 ou 1/8 W (À ajuster suivant transformateur)
      • R5 : 4700 Ω 1/4 ou 1/8W (À ajuster suivant transformateur)
      • R6 et R7 : 4700 Ω 1/4 ou 1/8W
  • Condensateur C1 : 10μF ou plus en 12V ou plus
  • Condensateur C2 : 220μF à 470μF en 12V ou plus
  • 2 LEDS en face avant
  • Du fil de câblage et une plaque à trou pour le montage
  • Un fusible (option) pour protéger l’arrivée 230V
  • Un ou des relais (option) solides ou électromécanique pilotable 3.3V

Raccordé à cette boite, on a la sonde de courant à placer autour du fil de phase du secteur à mesurer. Relier le blindage à la masse (Gnd) pour éviter de capter du bruit électrique.

Longue distance

Pour ceux qui sont sur une grande habitation avec le disjoncteur ou les actionneurs loin du routeur WIFI, l’utilisation d’un ESP32 avec une antenne déportée permet de doubler la portée du WIFI. On peut typiquement faire du 50m, là où votre smartphone ne captera plus le Wifi.

La sortie antenne sur connecteur SMA permet d’y rajouter une rallonge coaxiale pour placer l’antenne dans un endroit dégagé.

Implantation

ESP32 avec antenne déportée et Triac. Refroidisseur remplacé permettant de piloter des charges de maximum 1500W.
Important refroidisseur avec une charge de 3000W

Code Source

L’ensemble du code est écrit en utilisant l’IDE Arduino. Il est injecté dans un premier temps par la liaison série, puis une fois en place, on peut le modifier si besoin par le Wifi (voir les explications ici). Il faut dans les préférences de l’IDE, faire appel au gestionnaire de carte de « Espressif » qui développe l’ESP32. Allez dans Fichier / Préférences et mettez l’adresse : https://dl.espressif.com/dl/package_esp32_index.json

Le code source est composé de 9 fichiers à installer dans le même dossier.

Il est disponible ici sous forme d’un .zip:

Dezipper l’ensemble et ouvrez dans l’IDE Arduino (version 2.xx) le fichier RouteurSolaire_V_3_04_UxI.ino.
Vérifiez que vous avez les bibliothèques installées sur votre IDE Arduino :
– RemoteDebug
– PubSubClient
Pour la compilation du fichier RouteurSolaire_V_3_04_UxI.ino, veuillez sélectionner la carte ESP32 Dev Module ainsi que le port de COM de Windows sur lequel est branchée la carte par le port série. Avec certaines cartes, si le téléversement du code dans l’ESP32 ne se fait pas, il faut presser sur le bouton reset au début de la tentative de téléversement.

Premier lancement du programme

Au premier lancement du programme dans l’ESP32, le logiciel ne connait pas le nom et le mot de passe de votre réseau Wifi. Il va créer son propre réseau Wifi et passer en mode point d’accès. Sur votre Smartphone ou PC portable, regardez la liste des WiFi disponibles. Connectez-vous à celui qui porte le nom UxI-ESP32….., il n’y a pas de mot de passe. Ouvrez un navigateur web et rentrez l’adresse 192.168.4.1 qui correspond à l’ESP32. Il va vous renvoyez une page vous demandant le nom du WiFi de votre habitation auquel se connecter à l’avenir et le mot de passe.

Regardez, le moniteur série de l’Arduino, vous trouverez l’adresse IP sur votre réseau Wifi qui a été attribuée automatiquement par la box (DHCP) qui gère le réseau. Appuyez sur Reset si besoin pour relancer le démarrage de l’ESP32 et sa connexion au réseau WIFI que vous lui avez indiqué. Rentrez cette adresse IP dans un navigateur Web connecté à votre réseau et vous serez connecté à l’ESP32. Il n’y a rien à modifier dans le code comme dans la version V2.

Au démarrage ou après un « Reset », les 2 LEDs clignotent simultanément lorsque l’ESP32 cherche à se connecter au réseau WIFI.

Adresse IP fixe

Si vous souhaitez fixer vous-même l’adresse IP, allez faire un tour auprès de votre box à la rubrique réseau / DHCP, vous trouverez le champ des adresses dynamiques. Par exemple, souvent les Livebox d’Orange attribuent des adresses dynamiques DHCP entre 192.168.1.10 et 192.168.1.150. Il vous reste alors un champ libre pour attribuer vos propres adresses entre 192.168.1.151 et 192.168.1.253. Fréquemment, les .254 et .255 sont réservés à autre chose. Vous pouvez ainsi donner comme adresse 192.168.1.200 à l’ESP32 si aucune autre machine sur le réseau occupe déjà cette adresse.

IPAddress gateway correspond à l’adresse IP de votre box. C’est elle qui fait la passerelle (gateway) avec le monde extérieur. Chez Orange, c’est en général 192.168.1.1. Chez Free, c’est plutôt 192.168.0.254. Les trois premiers chiffres 192.168.0 ou 192.168.1 doivent être les mêmes pour la box et votre ESP.

Arduino OTA

Le code inclut la possibilité de le mettre à jour non pas par la liaison série entre le PC et l’ESP mais via le Wifi. C’est la fonction Arduino OTA (On The Air). Dans l’IDE Arduino, allez à Outils/Port/Réseau Port vous y trouverez mentionné la carte ESP32 du routeur. Sélectionnez là et le téléchargement se fera via le Wifi et non plus le port série. L’IDE Arduino vous demande un mot de passe lors de la compilation. Répondez n’importe quoi, 1 lettre minimum. Cette fonctionnalité est bien utile, une fois le routeur implanté probablement loin de votre PC.

Bugs Soft

Attention, si vous n’arrivez pas à communiquer entre votre PC et l’ESP32, c’est qu’il vous manque le driver pour l’interface USB. En général, c’est le CP2102 qui se trouve sur la carte ESP32. De nombreux Tutos sur internet expliquent comment l’installer. Exemple: https://techexplorations.com/guides/esp32/begin/cp21xxx/

Sur certaines configurations, lors de la compilation, il y a une erreur de librairie inexistante :…..include <hwcrypto/sha.h>
Avec un editeur de texte, ouvrez le fichier dans vos bibliothèques Arduino C:Users/Utilisateur/Documents/Arduino/libraries/RemoteDebug/src/utility/Websockets.cpp
Le début de l’adresse peut changer suivant l’utilisateur. Retrouvez le dossier Arduino pour localiser le fichier dans les sous-dossiers.

A la ligne 42, remplacez :
#include <hwcrypto/sha.h>
par
#include <esp32/sha.h>

Ne me demandez pas pourquoi, sur mon PC de bureau, je n’ai pas besoin de faire cette modification, sur mon PC portable, j’ai besoin.

Remarque

Si vous regardez les premières lignes du programme, il y a 2 constantes :

#define HOSTNAME « UxI-ESP32-« 

#define CLE_Rom_Init 1234567892

La première définie le début du nom de votre ESP sur le réseau, le deuxième est une clé qui permet de tester si le programme a déjà tourné. Au premier lancement, la mémoire de stockage en ROM est virginisée, par la suite, elle contiendra tous les paramètres de configuration et l’état des compteurs d’énergie en Wh chaque jour à 0h. Si vous voulez, virginiser à nouveau la mémoire, changé la constante. Attention, votre ESP32 repartira en mode point d’accès, puis une fois le réseau WiFi connu, il aura une adresse IP obtenue par la box internet (DHCP).

Debug en ligne

Si vous êtes branché par le port série à l’ESP32, les messages de debug sous la forme Serial.print(…) ou Serial.println() sont disponibles sur le moniteur de l’IDE Arduino à 115200 bauds.

Si vous êtes branché uniquement en Wifi, le debugger de Joao Lopes est implanté dans le logiciel. Il est accessible par le navigateur web. Téléchargez le code ici: https://github.com/JoaoLopesF/RemoteDebugApp , décompressez le zip dans un dossier quelconque et cliquez sur index.html. Rentrez l’adresse IP de l’ESP32 pour obtenir les messages envoyés par les Debug.print() ou Debug.println(…) .

Watchdog

Le fonctionnement de l’ESP32 est surveillé par un watchdog (chien de garde). Si l’ESP32 se bloque pendant 120s, l’ESP32 se reset. Si vous ne voulez pas être embêté par cela durant des essais, passez en commentaire // les lignes ou il y a esp_task_wdt…..
De même, un test sur la présence du Wifi est effectué. En l’absence de WIFI, au bout de 10mn, l’ESP32 se reset.

Diagramme fonctionnel

Ici, nous exploitons les capacités double cœur de l’ESP32.

Le « Cœur 0 » effectue le prélèvement des mesures de tension et courant pendant 20ms ainsi que le calcul des puissances. Il répète l’opération toutes les 40ms.

Le « Cœur 1 » gère les surproductions et communique par WIFI.

Le gradateur avec le signal Zero Crossing toute les 10ms, permet de synchroniser l’ensemble en activant une interruption sur l’ESP32. Un timer fourni une interruption interne toute les 100μs permettant de générer un retard de 0 à 10ms par pas de 100μs pour déclencher l’ouverture du triac à l’instant défini par le logiciel.

Exemple de routage et régulation à Zéro Watt

Dans cet exemple, l’ouverture du triac vers le chauffe-eau est d’environ 50% du temps (5ms). Le système se régule pour avoir une puissance échangée avec le réseau public autour de 0W . Sur une durée d’une demi sinusoïde de 10 ms, on a une première période où l’on injecte de l’énergie puis le Triac s’ouvre, on consomme de l’énergie sur le réseau. La somme des 100 mesures du produit U*I sur la période de 20 ms donne un résultat proche de zéro en Watt. Par contre, pour le calcul de la puissance apparente qui est le produit de la tension et du courant efficaces qui ne tient pas compte du signe (voir formules ci-dessus), on a une valeur importante en VA.

Votre fournisseur d’électricité vous facture en fonction des W ou Wh et non pas sur le VA (puissance apparente).

Sécurité

En travaillant sur ce projet en 230V, vous acceptez d’assumer la responsabilité de votre propre sécurité et de prendre toutes les précautions nécessaires pour éviter les accidents électriques.

Responsabilité

Articles sur le photovoltaïque

F1ATB André

Radio Amateur - Domotique - Photovoltaïque

Vous aimerez aussi...

500 réponses

  1. Maxime dit :

    Bonjour,

    Merci encore pour tout le travail et le partage effectué !
    Je me suis lancé dans la réalisation de la version avec sonde ampèremétrique.
    J’ai configuré les paramètres pour MQTT / Home Assistant dans l’onglet « Paramètre » de l’interface Web.
    Quel est ensuite la marche à suivre pour récupérer ces sensors dans Home Assistant ?
    (cette question est peut-être du coup plus pour la domotique Home Assistant que pour le routeur mais je n’ai rien trouvé sur les forums spécialisé.
    Merci beaucoup !!

    • F1ATB André dit :

      C’est expliqué sur la page. Vous envoyez via le broker MQTT et vous avez le code à mettre dans un fichier mqtt.yml.
      Cdlt

      • Maxime dit :

        Ok même procédure donc que pour Domoticz.
        Il faut déclarer en « sensor » dans le fichier mqtt.yaml avant la liste et toutes les entitées remontent toutes seules dans Home Assistant. (Version V3.03_UxI)
        Merci beaucoup !

    • Marcos83 dit :

      Bonjour,
      J’ai réalisé un fichier avec tout le code nécessaire pour installer et configurer toutes les données du routeur sur Home Assistant sans écrire une ligne de code dans Home assistant. Tout se configure automatiquement. Il suffit d’ajouter ce fichier dans le repertoire du routeur et de suivre la procédure (très simple) indiquée dans ce fichier nommé homeassistant.ino. Je l’ai transmit à André qui l’utilisera peut-être dans ces prochaines versions. En attendant je peux vous le transmettre si vous êtes intéressés.
      Bien à vous.

      • Maxime dit :

        Merci de la proposition, mais je pense que André l’a intégré dans la dernière version (?) car les entités remontent dans HA sans difficulté.

  2. Lucas dit :

    Bonjour,

    Merci encore pour tout le travail et le partage effectué !
    Je me suis lancé dans la réalisation de la version avec sonde ampèremétrique.
    J’ai configuré les paramètres pour MQTT / Home Assistant dans l’onglet « Paramètre » de l’interface Web.
    Quel est ensuite la marche à suivre pour récupérer ces sensors dans Home Assistant ?
    (cette question est peut-être du coup plus pour la domotique Home Assistant que pour le routeur mais je n’ai rien trouvé sur les forums spécialisé.
    Merci beaucoup !!

  3. Stef D dit :

    Bonjour André, suite au passage à la v3.03 en OTA il semblerait que l’action de routage « Ordre Off » ne fonctionne plus. La « Ordre On » fonctionne quant à elle.
    Je continue les investigations

  4. eljano dit :

    Bonjour André,
    Un truc que je comprends pas dans le code UxI
    Si j’ai bien compris, tu appelles toutes les 2s, dans la tache 0, CallESP32_UxI() la fonction qui va lire les valeurs électriques (en gros PW) envoyées par l’esp32 qui gère la lecture au niveau sondes, et tu appelles dans la tache 1 la foncion GestionOverproduction() qui gère le triac, toutes les 200ms
    Donc tu appelles 10 fois la gestion de l’ouverture du triac alors que tu ne lis qu’une fois la valeur de la puissance, pendant ces 10 appels mais PW ne changera pas lors de ces appels ?
    Ou il y a quelque chose que je n’ai pas vu ou pas compris.

    Cordialement,
    Jean-Luc

    • F1ATB André dit :

      Il y a 2 cas à prendre en compte :
      1) On mesure et on pilote le Triac avec le même ESP. Dans ce cas, on mesure toutes les 40 ms, mais on moyenne sur une période plus grande. Ensuite toutes les 200 ms, on calcule l’ouverture du Triac
      2) On a 2 ESP. On mesure sur ESP1 et on pilote un Triac sur ESP2. Comme on ne peut pas chercher depuis ESP2 toutes les 40ms la valeur de la puissance sur ESP1 pour ne pas trop charger le WIFI et il y a le temps de ping etc, on se limite à une mise à jour de la puissance toutes les 2s. Par contre, on laisse le même traitement toutes les 200 ms pour calculer la correction du Triac afin d’avoir la même vitesse de réponse de l’asservissement. Le retard est ainsi incrémenté au même rythme avec le même pas.
      Cdlt

      • eljano dit :

        Je ne considérais effectivement que le cas du triac distant.
        Je suis d’accord avec votre explication, mais vous considérez donc que l’action précédente, celle avec la même puissance, n’a pas été suffisante, puisque la puissance n’a pas changée suite à l’action, en un sens c’est un peu comme si on augmentait le gain de boucle.
        Bon je ne vais pas vous embêter plus avec ça.
        Bonne soirée

  5. Dacquignie dit :

    Bonjour André, j’ai actuellement une V3 Linky en fonctionnement qui présente parfois des bugs ( comme une valeur d’ouverture negative du triac pour l’ECS affichée : « -2147483547 » et une valeur puissance active moyenne : « Nan » alors qu’en page de données brute les infos arrivent bien toutes les 2 secondes depuis le linky puisque je vois bien la ligne 3 : date qui se met a jour)
    J’ai alors monté un V3 UXL pour vérifier comment ça se comporte, par contre je me demande comment modifier les valeurs pour le calibrage de la tension ( qui pour le moment s’affiche à 298v alors que j’ai 256v en réel selon la page de données brutes de mon routeur linky)
    vous notez qu’il faut modifier le coeffecient dans le code, s’agit – il de faire varier la valeur « 1000 » des lignes :
    unsigned int CalibU = 1000;
    unsigned int CalibI = 1000;
    ou alors
    de faire varier la valeur 0.2083 de la ligne 102 ou alors de la ligne 104 ou peut être même les 2 ? pour la tension ?
    puis ensuite la valeur 0.0642 de la ligne 103 ou de la ligne 105 ou peut être même les 2 pour régler la valeur de la calibration de « I » (qui selon ce que j’ai compris doit être la même que celle affiché en VA du linky)
    laquelle de ces 2 valeur nécessite de provoquer une consommation élevé résistive pour effectuer un réglage fin, peut être les 2 aussi ?
    est ce que je peu arrêter l’onduleur pour effectuer ce réglage afin d’augmenter « artificiellement » ma consommation du réseau EDF ?
    pensez vous que la réponse pourrait etre rajouté de votre part en haut de page à l’endroit suivant pour tout le monde :

    « Calibration

    L’ESP en charge de la mesure de tension et du courant nécessite une calibration des valeurs mesurées pour s’adapter aux disparités des transformateurs, résistances etc. Commencer par la tension en mesurant votre tension secteur avec un voltmètre ou l’affichage du Linky et adapter le coefficient multiplicateur pour avoir la même valeur affichée sur la page d’Accueil. Un coefficient de 1000, correspond au schéma avec un transformateur de 6V. Baisser ce coefficient si la tension affichée est trop haute, montez-le si elle est trop basse.
     »
    Merci pour votre aide, cordiament MD.

    • F1ATB André dit :

      Vous ne devez rien changer dans le code. La calibration se fait en bas de la page paramètres.
      Pour la version Linky, vous devez par moment mal décoder la trame du Linky. Il faut légèrement modifier la résistance R1 ou passer à un câble blindé vers le Linky si la liaison est longue.
      Cdlt

      • Dacquignie dit :

        Bonjour André, j’ai procédé au calibrage comme indiqué avec l’onglet paramètre, je vous laisse en image le résultat comparatif entre les valeurs relevées par le v3 linky et le résultat de la v3 UXL paramétré :

        https://zupimages.net/viewer.php?id=23/34/3j8p.png

        https://zupimages.net/viewer.php?id=23/34/p1sn.png

        J’ai tenté voter solution concernant le plantage de ma v3 linky vis à vis du câble (environ 3.5 mètres en RJ45CAT6, je n’ai pas sur ce câble de blindage particulier comme une torsade de câble qu’on peut trouver sur les fils d’antenne, j’ai alors dénudé les paires non utilisées pour les relier ensemble et les mettre dans un domino avec lequel j’ai relié le fil de terre de 2.5 que j’ai en alim du routeur, mais ça n’a pas résolu le pb.
        Merci encore pour votre aide.

        • F1ATB André dit :

          Pour la version UxI pensez à installer la version V3.03_UxI. Elle corrige un bug important ou parfois, on avait de mauvaises valeurs.
          Pour la version Linky on a par exemple le cas de Van Robaeys (page sur le Linky) qui a réussi avec 30m de câble CAT7 et une 1 kohm.
          Pour les calibrages, vos résultats sont corrects. Je vois seulement 0.5% d’ecart entre les puissances.

      • J’ai eu parfois ce problème de mauvais décodage de trame Linky avec des alimentations d’Aliexpress 230VAC/5VDC, depuis j’utilise des blocs chargeurs de marque TIZEGU certifié Apple MFI 5W 1A acheté sur Amazon et je n’ai plus de problème. J’ai supprime le boitier blanc pour souder le 230VAC in et la sortie out 5VDC .

        • F1ATB André dit :

          Oui, il faut parfois remettre en cause le bloc alimentation 5V. Certains n’ont pas un 5V DC très stable / propre. Après, ils sont tous made in china, il faut juste changer de marque.

  6. jl26120 dit :

    Bonjour André,
    merci pour votre routeur qui est le meilleur que j’ai réalisé et testé. Merci de l’avoir mis à la disposition de tous.

    Sur la dernière évolution j’ai le message d’erreur suivant qui apparait : Compilation error: ‘INIT_EEPROM’ was not declared in this scope
    Que faut-il que je fasse s’il vous plaît?
    Cordialement

    • F1ATB André dit :

      Je ne comprends pas pourquoi cette erreur. Normalement sur l’IDE Arduino si vous installez l’extension pour ESP32, elle contient la librairie EEPROM.
      Essayez les exemples de programme utilisant l’EEPROM de l’ESP32
      Vérifiez à la compilation que vous avez bien choisi la carte ESP32 Dev Module.
      Cdlt

  7. Rob dit :

    Hello André,

    Thank you for the nice project. I upgraded from the former version. All went well, it works good. 🙂

    Is there an English version in the future?

    Kind regards,
    Rob

    The Netherlands.

  8. attali bruno dit :

    Bonjour André et merci pour votre dévouement mais j ai un petit problème que je cherche depuis un moment , de temps a autre le routeur monte aléatoirement et brièvement des grosse monté de la tension ou des fois les ampères merci

  9. Barreyre Jp dit :

    Bonjour,

    Très beau projet et très bien décrit et documenté. Par contre je n’arrive pas à compiler votre code ni avec l’IDE 1.8 ni avec la version 2. Il me manque les librairies ESPmDNS.h et esp_task_wdt.h. Je n’ai pas réussi à les telecharger directement avec l’IDE. Où peut-on les trouver ?
    Bravo pour votre travail.
    Bien cordialement,

  10. hexamus dit :

    Bonjour,
    J’aurais deux question, ou je n’est pas trouvé de réponse (compliqué le système de commentaire)

    – Est-il possible de mettre en local 2 dimmer/gradateur commandé de façon séparer
    – Est-il possible d’envoyer une commande par MQTT ou HTTP depuis un système domotique pout forcer les sortie

    Merci par avance pour les réponses
    Merci pour tout le travail accompli

    • F1ATB André dit :

      Pour l’instant je n’ai qu’un seul dimmer. Il faut que je fasse des essais pour voir si avec 2 dimmers je tiens le temps réel. La solution en attendant est de mettre un deuxième ESP qui va chercher les données sur le premier.
      Pour MQTT, actuellement, je travaille dessus pour améliorer le reporting. Pour la réception de commande, j’étudie la faisabilité pour une version ultérieure.
      Cdlt

  11. StefanDu30 dit :

    Bonjour
    Je viens de passer d’une box adsl à une box fibre SFR, la redirection des ports pour l’accès distant au serveur web doit du coup être faite en ipv6 mais l’esp32 ne dispose que d’une ipv4, auriez vous une idée pour configurer l’accès ? Je parcours le net mais pour l’instant pas de solution trouvée…
    Merci d’avance,

    • F1ATB André dit :

      C’est la première fois que l’on me pose cette question. Mes connaissances IPV6 étant faibles, je n’ai pas la réponse.
      J’ai vu que c’est sujet souvent traité sur les forums qui parlent de SFR.
      Désolé

    • herve dit :

      Bonjour, je n’ai pas testé (pas chez SFR), mais il semble que vous deviez demander à l’assistance SFR (au moins au niveau 2) de récupérer une connectivité IPv4 « full stack », c’est à dire avoir la pile complète des 65535 ports et ainsi voir le retour des options NAT, UPnP et DDNS. Cdlt

  12. Francksamy dit :

    bonjour André,

    j’ai réalisé le montage en mode projet avec 2 esp 32 (un pour la mesure et un pour le gradateur distant)depuis 1 semaine et cela fonctionne j’ai quelques ajustement a faire tel que modifier les résistance du pont diviseur en sortie de transfo pour avoir une sinusoïdale de tension et pas une forme aplatie en haut des sinusoïde. mais j’ai une question.

    les jours de beau temps j’ai encore 2 ou 3kw qui sont rejeter et mon gradateur est monter sur une des 3 résistances de 1000w qui compose mon ecs

    le gradateur j’ai pris un 24a et vous dite de ne pas trop monter en i pour ne pas le détérioré car dissipateur pas prévue. mon ecs a 3 résistance de 50 ohm donc 1000w env par résistance. peut-on monter 2 esp32 distant avec gradateur? un de 2000w et un 1000w.

    • F1ATB André dit :

      Je ne sais pas si vous êtes en monophasé ou triphasé.
      Regardez plus haut dans les commentaires. Régis a changé le Triac en mettant un modèle avec un meilleur boitier dissipateur : BTA40 800B boitier RD91. Il est branché sur une charge de 3000W.
      Cdlt

      • francksamy dit :

        Bonjour André et merci pour votre réponse,

        Je suis en mono.
        j’ai 6 panneaux de 425kwc (2.55kwc) avec 3x ds3 (880va) montés sur mon toit (encv 40° de pente), orientés sud/sud/ouest. montage effectué par moi, et pas de revente de surplus. d’où l’intérêt d’optimiser l’autoconsommation

        Je n’ai pas trop l’habitude de travailler sur de l’electronique. Mais j’ai quelques bases étant agent de maintenance. Je n’ai pas trouvé le poste de Régis. Mais pas trop grave j’ai compris qu’il remplacé le triac par une version à cosse en soudant des rallonge sur la carte et qu’il mettais un plus gros dissipateur.

        je voulais en faite faire un montage du  »triac 1 » que j’interface sur une rallonge (max 1000w), afin de le faire bouger l’hiver sur un chauffage elec mobile dans une autre pièce et l’été sur une résistance de chauf eau ou j’ai mis une prise mal.

        le second triac que je brancherai en parallèle du J/N de l’ecs (2000w environ) afin de ne pas  »gâcher » un surplus éventuel quand le premier triac est saturé.

        (en plus du refroidisseur et triac à modifier) De ce que je comprend, la partie logiciel n’est pas prévue pour ce scenario ?
        quoi que avec un relais entre la carte triac et l’ecs on peut bien le faire mais on risque d’avoir un effet on/off court du au appel de courant intempestif d’un moteur de machine a laver par exemple.

        • F1ATB André dit :

          En jouant sur les seuils On et Off pour piloter le relais on peut s’afranchir de l’appel de courant au démarrage.
          Si vous ne dépassez pas 2000W, vous pouvez garder le triac par contre il faut bien augmenter le radiateur.
          Cdlt

  13. F6AAM Jean-Claude dit :

    Bonjour André,
    Sur le diagramme de fonctionnement je vois une flèche rouge qui indique qu’une interruption (probablement toutes les 10mS au passage à zéro du secteur) synchroniserait les mesures U,I dans la tâche du coeur 0. Mais dans le code je ne vois pas cette interruption venir synchroniser cette tâche. il semble que cette mesure se fasse toute les 40mS pendant 20mS indépendamment du passage à zéro du secteur. Est-ce une fausse flêche ou un bout de code que j’ai mal compris/perçu ?
    Ceci je comprends parfaitement le rôle de cette interruption pour piloter le triac dans le code du core 1.
    73 Jean-Claude

    • F1ATB André dit :

      Vous avez raison, c’est une fausse flèche correspondant à une ancienne version du logiciel. On mesure pendant 20ms en utilisant l’horloge de l’ESP32 pour caler les échantillons dans le temps.
      Cdlt

  14. Serge+11 dit :

    Bonjour,
    Est il possible de piloter l’ESP32 à distance, quand je suis absent du domicile, via internet (sans WIFI)?
    En utilisant la domotique? mais Je ne connais rien de cette technologie. Est ce que Domoticz est adapté?
    Cdt
    Serge

    • F1ATB André dit :

      Sans Wifi, on ne peut pas piloter l’ESP32. Il faudrait se brancher à un ordinateur via l’interface série et re-écrire tout le code.
      Cdlt

  15. Serge+11 dit :

    Et en utilisant un micro PC style orange PI ou Raspberry Pi et domoticz ou Home Assistant?
    Il n’est pas possible de modifier les paramètres a distance via internet?
    Ou juste piloter ON/OFF un SSR géré par l’ESP et votre application?
    Je pensais que c’était ça la domotique!
    Cdt.
    Serge

    • F1ATB André dit :

      Avec Home Assistant on a le reporting en permanence du routeur (puissance, etat des actions, ouverture du Triac etc..). Pour modifier les paramètres du routeur, il faut se connecter directement à lui. Dans tous les cas, il faut le Wifi opérationnel.
      Cdlt

  16. StefanDu30 dit :

    Bonjour,
    Si vous avez une box en ipv4 vous pouvez faire une redirection de ports et l’accès à distance fonctionne sans problème, par contre si comme moi depuis une semaine vous disposez d’un box avec connectivité en ipv6 ça ne fonctionne plus, du moins je n’ai pas encore trouvé comment, l’esp32 n’ayant qu’une ipv4 et pas d’ipv6, je suis en cours de recherche et essais, si je trouve je vous dirai, c’était quand même top d’avoir accès à distance !
    Après certain demande au fournisseur un passage d’ipv6 à ipv4 mais apparemment c’est compliqué et pas forcément mieux d’un point de vue sécurité…

    • Mathieu dit :

      Je confirme on peut repasser en IPv4 après qu’ils vous aient passé sans demander en IPv6. Cela a été mon cas, beaucoup en parle sur le forum SFR ou RED. Il faut contacter le support en ligne ou appeler.

  17. Nicolas dit :

    Bonjour André,
    Merci à vous de partager très concrètement votre passion.
    Dans le cadre de la réalisation de ce routeur solaire, je souhaiterais prioriser certains consommateurs gourmands.
    Avez vous déjà travailler sur le sujet ? . A savoir :
    intégration de plusieurs capteurs type sct 013 pour détecter la mise en route de consommateurs prédéfinis induisant la coupure de certains autres (arrêt piscine quand le lave vaisselle tourne, par exemple).
    Merci André.

    • F1ATB André dit :

      Non, je n’ai rien développé là-dessus. Une des solutions, c’est de prendre un montage qui lit le sct13. Il existe des modules pré-câblés avec un ESP32 et d’envoyer cela sur un système domotique comme home assistant pour gérer toutes les règles de consommation et de marche-arrêt.
      Cdlt

  18. Thierry dit :

    Bonjour André,
    Tout d’abord merci encore pour ce travail et cet investissement dans ce routeur.

    J’aurais une question afin de mieux comprendre le code :
    ligne 432 : voltM[i] = (19 * voltM[i] + float(volt[i])) / 20; //Mean value. First Order Filter. Short Integration
    Sauf erreur de ma part, il semblerait que vous utilisé un filtrage à moyenne mobile exponentielle sur cette valeur. Mais qu’en ait-il de la valeur (n-1) sur voltM ? Et comment avez vous estimé les coefs 19 et 20 ?
    Merci pour votre aide
    Cordialement
    Thierry

    • F1ATB André dit :

      C’est une intégration simple similaire à un filtre RC du premier ordre. Cela permet de lisser un peu. Le coefficient 19/20 est arbitraire. On prend 5% de la nouvelle valeur et on garde 95% de l’ancienne à chaque mesure toutes les 40ms.
      Cdlt

  19. Seb dit :

    Bonjour,
    Que ce passe t il s’il le chauffe eau est alimenté via le routeur et via le contacteur jour / nuit en même temps ?
    Cordialement
    Sébastien

    • F1ATB André dit :

      Pas de souci. Regardez le schéma en fin d’article.

      • Seb dit :

        OK merci.
        J’ai des heures creuses en journée et sans doute que j’aurai du surplus vers le chauffe-eau en même temps.
        Merci pour votre retour rapide.
        Je suis rassuré.
        Sébastien

        • Christophe L. dit :

          Je suis dans le même cas et je me posais la même question. Mais du coup quand le contacteur jour/nuit se déclenche le 220V est envoyé directement sur la sortie LOAD de la carte Triac ? Ca ne risque rien ? Avez-vous fait le test du coup ? Merci d’avance.

  1. 12 septembre 2023

    […] F1ATB […]