Compteur intelligent Belge. Comment récupérer les données.

Cette article a pour but de vous expliquer comment remonter les données de votre compteur intelligent belge vers un superviseur domotique. Dans cette exemple, les données seront intégrées a Jeedom mais il est tout a fait possible d’envoyer les données vers un autre superviseur.

Prerequis

Il vous faut bien sur un compteur intelligent belge compatible (mono ou tri) et les ports P1/S1 activés dessus, l’activation des ces ports est gratuit lors de l’installation et coute 25€ en plus s’il est fait après (prix Ores)

Plus d’infos sur le compteur intelligent: https://www.ores.be/particuliers-et-professionnels/avantages-intelligent

Matériel nécessaire

Pour pouvoir communiquer avec notre compteur, il faut:
– Wemos D1 Mini
– Cable de 11cm avec 2 connecteurs RJ12
– PCB de support au Wemos
– Une boite pour que ce soit propre (optionnel)
– Cable Mini usb pour pouvoir flasher le wemos

Wemos D1 Mini, Changement de Firmware

Nous allons installer le firmware mega espeasy sur le wemos de manière a utiliser ses fonctionnalité. Il est possible d’utiliser d’autres firmware mais c’est un des plus simple a mettre en place.

Vous pouvez aller sur le site du développeur (https://github.com/letscontrolit/ESPEasy/releases) et récupérer la dernière version

une fois que le zip est téléchargé, il faut le dézipper:

on retrouve l’executable a lancer mais il manque le fichier du firmware a utiliser, aller dans le dossier bin et déplacer ce fichier ESP_Easy_mega_20211105_normal_ESP8266_4M1M.bin a coté de l’exécutable. Connectez le wemos sur le port usb de votre PC via le cable et lancez le programme.

sélectionner le port et le firmware qui a été déplacé dans le dossier du programme. Cliquez sur flash, une fenêtre en ligne de commande s’ouvre et le firmware s’installe, a la fin vous aurez un message “flash Complete”.

Si vous ne trouvez pas le bon port COM, allez dans le gestionnaire de périphériques, vous devriez le trouver.

Assemblage du module

Comme dit plus haut , le module est composé du wemos, d’un PCB de support, du câble et d’une boite
on va assembler tout cela ensemble, Attention, il est possible de mettre le wemos dans 2 positions différentes, une seule est la bonne, il faut que l’antenne soit a l’opposé du connecteur RJ12

il ne reste plus qu’a placer l’ensemble dans la boite prévue, elle a été faite sur mesure. il y a un jeu de 0.5mm de chaque coté, après si vous n’aimez pas que le PCB bouge un peu, rien ne vous empêche de mettre un point de colle en dessous du PCB pour le maintenir.

Placement dans le compteur

Il ne reste plus qu’a installer le module dans le compteur (pas de scellé a retirer)

Levez le cache vert se trouvant en bas a gauche et connectez le module sur le port P1 a droite (attention il y a 2 ports, on utilise le P1 pas le S1)

Le module est alimenté par le compteur, après quelques secondes il devrait être accessible

Configuration du wifi et des paramètres sur le wemos

Maintenant que le firmware est installé, on peut se connecter sur le wemos qui crée un point d’accès wifi (redémarrer le wemos est nécessaire). utilisez votre GSM ou votre PC portable pour s’y connecter

s’il n’y a pas le pop up de config qui s’ouvre automatiquement, allez sur cette url dans votre explorateur (edge, chrome, …) : http://192.168.4.1

sélectionnez le wifi sur lequel votre wemos doit se connecter en y ajoutant le password. Voila, il va redémarrer est s’y connecter, le point d’accès est désactivé. on peut maintenant rentrer dans la config du module via son réseau wifi.

regardez au niveau de votre serveur DHCP pour connaitre l’ip du wemos puis connectez vous dessus.
ce que je conseil de faire, soit bloquer la réservation DHCP dans votre routeur, soit mettre une IP statique pour être sur qu’elle ne change jamais. Dans l’onglet Config:

Voici un exemple de configuration a faire
– donner un nom a votre esp
– si vous le souhaitez, n’autorisez que votre réseau local
– et mettre une IP fixe a votre module.

On va maintenant configurer le serveur Telnet qui va fournir les compteurs. pour cela, aller dans l’onglet “Device”

Cliquez sur Add de la première ligne et sélectionnez dans la liste “communication – P1 Wifi GW”

petite explication:
– Name: le nom, vous mettez ce que vous vouler
– TCP Port: Enable, sinon cela ne fonctionnera pas
– Baut Rate: la vitesse de dialogue entre le module et le compteur. cette valeur est définie sur le compteur et ne peut pas être modifiée
– Serial Config: 8 Bit / None / 1. cette valeur est définie sur le compteur et ne peut pas être modifiée
et laisser les 2 dernières elles ne sont pas nécessaires

Bon votre module Wemos est maintenant configuré et il est pret a avoir des requetes venant de votre superviseur.

Tester le wemos a partir d’un smartphone/PC (optionnel)

cette étape n’est pas indispensable mais peut être intéressante pour faire un debug et trouver une erreur. J’utilise soit Putty sur PC soit JuiceSSH sur smartphone android.

Putty:

JuiceSSH:

si vous voyez des données de ce type apparaitre, c’est que tout est bon au niveau du wemos.

Superviseur, Jeedom

on s’occupe de la dernière étape, l’intégration des données du wemos dans jeedom
il y a 2 choses a faire, créer des commandes info virtuelles et créer un scenario.

commençons par les commandes, allez dans le plugin virtuel et créé un nouveau virtuel:

Une petite info sur chacune des commandes de type info:

  • Cpt consommation jour: Total des kilowattheures (kWh) d’énergie consommée aux heures pleines (code 1.8.1)
  • Cpt production jour: Total des kWh d’énergie injectée aux heures pleines (code 2.8.1)
  • Cpt consommation nuit: Total des kilowattheures d’énergie consommée aux heures creuses (code 1.8.2)
  • Cpt prod nuit: Total des kWh d’énergie injectée aux heures creuses (code 2.8.2)
  • Puissance conso: Puissance, exprimée en kilowatts, prélevée depuis le réseau de distribution d’électricité à ce moment précis. (code 1.7.0)
  • Puissance injection: Puissance, exprimée en kilowatts, injectée sur le réseau de distribution d’électricité à ce moment précis (code 2.7.0)
  • ConsoAujourdhui: Via scenario, obtention de la conso en cours pour aujourd’hui (kWh) (pas historisée)
  • ProdAujourdhui: Via scenario, obtention de la Prod en cours pour aujourd’hui (kWh) (pas historisée)
  • ConsoParJour: Via scenario, obtention de la conso par jour (kWh)
  • ProdParJour: Via scenario, obtention de la prod par jour (kWh)
  • Etat: permet de savoir si le wemos est accessible.

et puis les scenarios, le premier est le plus important il est programmé pour tourner toutes les minutes pour se connecter au wemos

et voici le scenario proprement dit:

Il y a 2 parties, le code et des actions, le code est copié ci dessous, il y a qqs valeurs a ajouter, IP et PORT, il faut mettre les infos de votre Wemos, les même que celles mises dans putty pour s’y connecter. Il faut aussi lier tous les ID des commandes virtuelles (en orange). Vous retrouvez une correspondance avec l’ID devant les commandes virtuelles créée juste avant.

  • 19215: Etat
  • 19201: Cpt consommation jour
  • 19202: Cpt production jour
  • 19203: Cpt consommation nuit
  • 19216: Cpt prod nuit
  • 19205: Puissance conso
  • 19206: Puissance injection
$cfgServer ="IP";
$cfgPort    = "PORT";                
$cfgTimeOut = "5";

$f=fsockopen("$cfgServer",$cfgPort,$cfgTimeOut);

if (!$f)
{
  $scenario->setLog('pas connecté');
  cmd::byId("19215")->event(0);
}
else
{
 $scenario->setLog('connecté');
  cmd::byId("19215")->event(1);
 $data2 = '';
 while (($data =  fgets($f, 4096)) !== false) {
    //$scenario->setLog($data);
    $data2 .= $data;
    //on remplit les valeurs dans les commandes jeedom
    if (substr( $data, 0, 9 ) === "1-0:1.8.1") {
       $scenario->setLog("1.8.1: " . substr( $data, 10, 10 ));
       cmd::byId("19201")->event(substr( $data, 10, 10 )) ;
       }
    if (substr( $data, 0, 9 ) === "1-0:1.8.2") { 
       $scenario->setLog("1.8.2: " . substr( $data, 10, 10 ));
       cmd::byId("19203")->event(substr( $data, 10, 10 ));
       }
    if (substr( $data, 0, 9 ) === "1-0:2.8.1") {
       $scenario->setLog("2.8.1: " . substr( $data, 10, 10 ));
       cmd::byId("19202")->event(substr( $data, 10, 10 ));
       }
    if (substr( $data, 0, 9 ) === "1-0:2.8.2") {
       $scenario->setLog("2.8.2: " . substr( $data, 10, 10 ));
       cmd::byId("19216")->event(substr( $data, 10, 10 ));
       }
    if (substr( $data, 0, 9 ) === "1-0:1.7.0") {
       $scenario->setLog("1.7.0: " . floatval(substr( $data, 10, 6 ))*1000);
       cmd::byId("19205")->event(floatval(substr( $data, 10, 6 ))*1000);
       }
    if (substr( $data, 0, 9 ) === "1-0:2.7.0") {
       $scenario->setLog("2.7.0: " . floatval(substr( $data, 10, 6 ))*1000);
       cmd::byId("19206")->event(floatval(substr( $data, 10, 6 ))*1000);
       }
    
	if (substr( $data, 0, 11 ) === "0-0:96.13.0") {
       //$scenario->setLog('Quitte la boucle');
       break;
	   } 
   	
    }
 //$scenario->setLog($data2);

 // coupe la session
 $scenario->setLog('coupe la session');
fclose($f);

}

Il est tout a fait possible d’ajouter d’autres valeurs comme la tension et le courant, voici le lien de la documentation des compteurs mono et tri de chez ores:

https://netoresorchardcms.blob.core.windows.net/media/Default/Documents/BrochureCompteurMonophase_FR.pdf

https://netoresorchardcms.blob.core.windows.net/media/Default/Documents/BrochureCompteurTriphase_FR.pdf

Maintenant, la partie action sert a calculer la conso et la production d’aujourd’hui. dans cet exemple, j’ai additioné les 2 compteurs car le suis en mono-horaire mais il est tout a fait possible de séparer les 2 valeurs pour ceux qui sont en bi-horaire

créer 2 events:
[Object][Virtuel][ConsoAujourdhui] contient (#[Object][Virtuel][Cpt consommation jour]# + #[Object][Virtuel][Cpt consommation nuit]# – variable(IndexConsoNuit) – variable(IndexConsoJour))*1000
[Object][Virtuel][ProdAujourdhui] contient (#[Object][Virtuel][Cpt production jour]# + #[Object][Virtuel][Cpt prod nuit]# – variable(IndexProdNuit) – variable(IndexProdJour))*1000

Une petite info sur les variables, elles viennent d’un autre scenario que je vais expliquer en dessous qui se lance 1 fois par jour

Voici le 2 eme et dernier scenario, il est lancé de maniere automatique une fois par jour a 23h59 (cron: 59 23 * * *). Pourquoi 23h59 et pas minuit? pour que les valeurs obtenues soient enregistrées le jour des données et pas le lendemain.

Une petite info sur ces 8 actions:

  • L’event [Object][Virtuel][ConsoAujourdhui] est remis a 0
  • L’event [Object][Virtuel][ProdAujourdhui] est remis a 0
  • L’event [Object][Virtuel][ConsoParJour] contient (#[Object][Virtuel][Cpt consommation jour]# – statisticsBetween(#[Object][Virtuel][Cpt consommation jour]#,max ,2 day ago,1 day ago)) + (#[Object][Virtuel][Cpt consommation nuit]# – statisticsBetween(#[Object][Virtuel][Cpt consommation nuit]#,max ,2 day ago,1 day ago))
  • L’event [Object][Virtuel][ProdParJour] contient (#[Object][Virtuel][Cpt production jour]# – statisticsBetween(#[Object][Virtuel][Cpt production jour]#,max ,2 day ago,1 day ago)) + (#[Object][Virtuel][Cpt prod nuit]# – statisticsBetween(#[Object][Virtuel][Cpt prod nuit]#,max ,2 day ago,1 day ago))
  • La variable IndexConsoNuit contient [Energie][Compteur Ores][Cpt consommation nuit] (sert a la conso d’une journée)
  • La variable IndexConsoJour contient [Energie][Compteur Ores][Cpt consommation jour] (sert a la conso d’une journée)
  • La variable IndexProdNuit contient [Energie][Compteur Ores][Cpt prod nuit] (sert a la prod d’une journée)
  • La variable IndexProdJour contient [Energie][Compteur Ores][Cpt production jour] (sert a la prod d’une journée)