Récupérer ses informations de consommation électriques via l'API GRDF

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
aspichat
Messages : 4
Inscription : 12 nov. 2018, 18:14

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par aspichat »

Bonjour,

j'ai créé un fork sur GitHub avec un fichier 'gaspar.py' modifié (quelques valeurs semblaient avoir été modifiées sur le site de GrDF) :

https://github.com/aspichat/domoticz_ga ... at-patch-1

Depuis, le script d'epierre fonctionne à nouveau pour moi... En attendant une vraie API de la part de GrDF...
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par ganq »

bonjour, j'ai rechargé ton fichier gaspar.py et j'ai cela comme erreur :

Code : Tout sélectionner

2018-11-12 23:01:12,246 logging in as monmail@free.fr...
Traceback (most recent call last):
  File "/home/pi/domoticz/scripts/domoticz_gaspar/gaspar_json.py", line 179, in <module>
    main()
  File "/home/pi/domoticz/scripts/domoticz_gaspar/gaspar_json.py", line 113, in main
    token = gaspar.login(USERNAME, PASSWORD)
  File "/home/pi/domoticz/scripts/domoticz_gaspar/gaspar.py", line 96, in login
    javaxvs=parse_lxml(req.text)
  File "/home/pi/domoticz/scripts/domoticz_gaspar/gaspar.py", line 59, in parse_lxml
    root = etree.fromstring(c)
  File "src/lxml/lxml.etree.pyx", line 3213, in lxml.etree.fromstring (src/lxml/lxml.etree.c:79003)
  File "src/lxml/parser.pxi", line 1848, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:118334)
  File "src/lxml/parser.pxi", line 1729, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:116892)
  File "src/lxml/parser.pxi", line 1063, in lxml.etree._BaseParser._parseUnicodeDoc (src/lxml/lxml.etree.c:110879)
  File "src/lxml/parser.pxi", line 595, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:105102)
  File "src/lxml/parser.pxi", line 706, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:106810)
  File "src/lxml/parser.pxi", line 635, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:105664)
  File "<string>", line 1
lxml.etree.XMLSyntaxError: Space required after the Public Identifier, line 1, column 50
je ne comprends pas..
domoticien amateur option bidouille
beber888
Messages : 6
Inscription : 10 nov. 2018, 23:56

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par beber888 »

J'ai essayé aussi, aucun changement. Même log que ceux en bas de page 1. Je suis sur que c'est a cause de leur données sur 6 mois.
Dates du relevé Index début de période Index fin de période Volume brut consommé (m³) Energie consommée (kWh) Coefficient de conversion Nature du relevé Qualification du relevé
Du 20/03/2018 au 20/09/2018 1896 2378 482.0 5350 11.1 Mesuré Cyclique
Du 30/11/2017 au 20/03/2018 0 1896 1896.0 20951 11.05 Mesuré Cyclique
Domoticz on raspberry PI3:
1 Rflink, 3 ESP8266, 10 PIR 433, 4 stores, 6 PriseElec, 6 SondesTempérature, 6 Caméra, Conso Elec
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par ganq »

Bonne nouvelle, j'ai réinstallé tous les fichiers, fait un chmod 777 et ca fonctionne !
Par contre, mon compteur affiche des m3 au lieu de kwh avec un coef de 0.001.. Je vais regarder cela !
domoticien amateur option bidouille
beber888
Messages : 6
Inscription : 10 nov. 2018, 23:56

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par beber888 »

Bon ben bonne nouvelle ça ne marche pas pour moi, par contre j'ai réussi à choper le comptage d'impulsion avec un esp8266. L'impédance ne devait pas être bonne dans mes essais précédent. Ne jamais abandonner!!!
Domoticz on raspberry PI3:
1 Rflink, 3 ESP8266, 10 PIR 433, 4 stores, 6 PriseElec, 6 SondesTempérature, 6 Caméra, Conso Elec
esylvain
Messages : 10
Inscription : 02 avr. 2018, 21:17
Localisation : Lyon, France

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par esylvain »

beber888 a écrit : 14 nov. 2018, 23:09 (...)j'ai réussi à choper le comptage d'impulsion avec un esp8266. L'impédance ne devait pas être bonne dans mes essais précédent. Ne jamais abandonner!!!
Bonjour, j'ai plusieurs esp8266 pour mes relevés de température vers Domoticz. J'en ai un de libre et je cherche à récupérer les relevés Gazpar. Peux tu m'indiquer comment tu as fait? (En mp si c'est trop hors sujet pour ce thread). Sylvain
SynoDS415+ - Pi B - Pi 2B - Pi 3B+ - ESP8266 (espeasy mega) & DHT22
beber888
Messages : 6
Inscription : 10 nov. 2018, 23:56

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par beber888 »

Le montage est celui la mais avec une tension de 3V3 et une resistance de 10K.
La sortie impulsion du Gazpar a été branchée sur 2 fils de breadboard Femelle.
Image

Et le code:

Code : Tout sélectionner

//------------------------DECLARATION------------------------------
#include <ESP8266WiFi.h>
#include <Modbus.h>
#include <ModbusIP_ESP8266.h>

// Mot de passe Wifi
const char* ssid = "xxxxxxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxxxx";

//Declaration des Entrées
int PulseCompteurGaz = 5; //D1

// Declaration serveur web
WiFiServer server2(80);

//ModbusIP object
ModbusIP mb;

//Config IP
IPAddress ip(192, 168, 0, xxx); // where xx is the desired IP Address
IPAddress gateway(192, 168, 0, xxx); // set gateway to match your network
IPAddress subnet(255, 255, 255, 0); // set subnet mask to match your

//Variables
byte SigneDeVie = 0;
unsigned long Jour = 0;
unsigned long Heure = 0;
unsigned long Minute = 0;
unsigned long MemMillis = 0;
int NombreBoucleMillis = 0;
float CompteurGaz = 0;    // 1 impulsion = 10dm3 = 0.01 m3
float CompteurGazOld = 0;
bool Impulsion = false;
unsigned long TimeImpulsion = 0;


//------------------Domoticz-------------//
#include <ESP8266HTTPClient.h>
//#include <PubSubClient.h>
// Paramètres HTTP Domoticz - HTTP Domoticz settings
const char* host = "192.168.0.xxxx";
const int   port = 800;
HTTPClient http;
#define IDX_CompteurGaz   169


//-------------------------------SETUP---------------------------
void setup() {
  Serial.begin(115200);

  delay(100);

  attachInterrupt(PulseCompteurGaz, IntChange, FALLING);

  // Connexion wifi
  WiFi.config(ip, gateway, subnet);
  mb.config(ssid, password);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);

  // Declaration des registres Modbus
  mb.addCoil(100);
  mb.addHreg(100, 0);
  mb.addHreg(101, 0);

  // connection  en cours ...
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
 
// Wifi connecte
  Serial.println("WiFi connecte");
 
  // Démmarrage du serveur Web
  server2.begin();
  Serial.println("Serveur Web demarre !");
 
  // Affichage de l'adresse IP
  Serial.print("Utiliser cette adresse URL pour la connexion :");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");


 
}


// --------------------------FONCTIONS--------------------------
void IntChange() {
  if (Impulsion == false)
    {
    Serial.println("Variation detectee");
    CompteurGaz+=0.01;
    Impulsion = true; 
    TimeImpulsion = millis();
    }
 
}

void VariationCompteurGaz(){      
    CompteurGazOld = CompteurGaz;
    // Envoie a Domoticz
    String url = "/json.htm?type=command&param=udevice&idx=";
    url += String(IDX_CompteurGaz);
    url += "&nvalue=0&svalue=";    
    url += String(CompteurGaz,3); 
    sendToDomoticz(url);
}


void sendToDomoticz(String url){
  Serial.print("Connecting to ");
  Serial.println(host);
  Serial.print("Requesting URL: ");
  Serial.println(url);
  http.begin(host,port,url);
  int httpCode = http.GET();
    if (httpCode) {
      if (httpCode == 200) {
        String payload = http.getString();
        Serial.println("Domoticz response "); 
        Serial.println(payload);
      }
    }
  Serial.println("closing connection");
  http.end();
}


 
void loop() {
   // Calcul temps de fonctionnement
   if (millis() > MemMillis) 
   {
      Jour = (millis()/86400000) + (49 * NombreBoucleMillis);
      Heure = (millis()-(Jour*86400000))/3600000;
      Minute = (millis()-(Jour*86400000)-(Heure*3600000))/60000;
   }
   else
   {
      NombreBoucleMillis = NombreBoucleMillis + 1;
   }
   
   MemMillis = millis();
  
   SigneDeVie++;
   mb.Hreg(100, SigneDeVie);
  
   // Fonction Modbus
   mb.task();

  // Reset memoire impulsion au bout de 1 seconde
  if ((Impulsion == true) and (millis() > (TimeImpulsion + 1000)))
  {
    Impulsion = false; 
  }

  // Variation compteur : mise a jour de domoticz
  if (CompteurGaz > (CompteurGazOld + 0.1))
  {
     VariationCompteurGaz();  
  }

 // Gestion du serveur Web
  WiFiClient client;
  // Vérification si le client est connecter.
  client = server2.available();
  if (!client)
  {
    delay(50);
    return;   // Si pas de client, fin du loop
  }
 
  // Attendre si le client envoie des données ...
  Serial.println("Nouveau client");
  if(!client.available()){
    delay(100);
  }
 
  String request = client.readStringUntil('\r');
  Serial.println(request);
  
  


  
  client.flush();

  if (request.indexOf("/RST") != -1)  
  {
    CompteurGaz = 0;
    VariationCompteurGaz();
  }



  if (request.indexOf("CPT%3D=") != -1)  
  {
    int Loc1; // , locations
    int Loc2; // , locations
    String NouvelleValeur;
    
    Loc1 = request.indexOf('CPT%3D=');  //Cherche l'emplacement de "CPT%3D=" après Début
    //Serial.println(Loc1);
    Loc2 = request.indexOf(' HTTP', Loc1 );   //Cherche l'emplacement de " HTTP" après Loc1
    //Serial.println(Loc2);
    NouvelleValeur = request.substring(Loc1+1, Loc2-2);   //Extrait la chaine entre les deux emplacements
    Serial.println("Donnee recues :");
    Serial.println(NouvelleValeur);
    CompteurGaz = NouvelleValeur.toFloat();
    VariationCompteurGaz();
  }
    

  // Réponse
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<body style=background-color:#82e0aa;>");
  client.println("<head><style type=""text/css"">a:link{text-decoration:none}</style></head>");
  client.println("<body><h1>ESP8266 - Module Cave</h1>");
  client.println("<h2>-------------------------------------------------------------</h2>");
  client.println("<h2>Informations systeme : </h2>");
  client.println("<h3><blockquote> - Temps de marche : ");
  client.println(Jour);
  client.println(" Jours ");
  client.println(Heure);
  client.println(" Heures ");
  client.println(Minute);
  client.println(" Minutes</blockquote></h3>");
  client.println("");
  client.println("<h2>-------------------------------------------------------------</h2>");
  client.println("<h2>Commandes : </h2>");
  client.println("<h3><blockquote> - Reset Compteur Gaz : ");
  client.println("</h3>");
  client.println("<blockquote><a href=\"/RST\"\"><input type='button'  value='Reset' style='width: 150px; height: 50px' ></a>");
  client.println("<h3> - Preset Compteur Gaz : ");
  client.println("</h3>");
  client.println("<form>");
  client.println("<div>");
  client.println("<label for='valeur'>Nouvelle valeur :</label>");
  client.println("<input id='valeur' type='text' name='CPT=' style='width: 150px; height: 50px' >");
  client.println("<input type='submit' value='Mise a jour' style='width: 150px; height: 50px' >");
  client.println("</form>");
  client.println("");
  client.println("</blockquote><h2>-------------------------------------------------------------</h2>");
  client.println("<h2>Analogique : </h2>");
  client.println("<h3><blockquote> - Compteur Gaz : ");
  client.println(CompteurGaz, 3);
  client.println(" M3");
  client.println("</h3><br>");
  client.println("</body>");
  client.println("</html>");
 
  delay(10);
  Serial.println("Client deconnecte");
  Serial.println("");
 

}

J'utilisait du modbus Ip dans mon Wemos D1, je continue à l'intégrer bien que depuis que j'ai Domoticz, je ne l'utilise plus.
L'envoie a Domoticz ne se fait pas à chaque impulsion (0.01M3) mais à chaque 0.1 M3.
Domoticz on raspberry PI3:
1 Rflink, 3 ESP8266, 10 PIR 433, 4 stores, 6 PriseElec, 6 SondesTempérature, 6 Caméra, Conso Elec
oli80330
Messages : 19
Inscription : 21 oct. 2014, 16:38

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par oli80330 »

ganq a écrit : 13 nov. 2018, 21:26 Bonne nouvelle, j'ai réinstallé tous les fichiers, fait un chmod 777 et ca fonctionne !
Par contre, mon compteur affiche des m3 au lieu de kwh avec un coef de 0.001.. Je vais regarder cela !
Salut à tous,
Comme vous après Linky, maintenant Gaspar est arrivé et même EAUPar...
De plus, je n'exploitais pas les données Gaz et et Eau en temps réel, donc des données du net feront l'affaire.
Pour le Linky j'ai un ESP8266 qui me permet de faire du temps réel avec mon installation solaire en autoconso.
Je vais donc enlever mes compteurs d'impulsion Gaz et Eau qui ne me servent plus à grand chose et souhaiterai passer via les sites internet.

Les fichiers du GitHub sont ils à jour car j'ai la même erreur que Beber88.
et une erreur aussi avec les fichiers de aspichat en haut de cette page2.
Domoticz on RPi : Prises, Volets, Temp, Conso (via Shelly), Contacts et mouvements Meian
Contrôles : Volets , Lumières (Script IP, capteurs MVT), Alarmes (heures, mobiles...), Poêle ETNA (via ESP), Clim (via plugin Tuya)
oli80330
Messages : 19
Inscription : 21 oct. 2014, 16:38

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par oli80330 »

Après avoir pris contact avec GRDF, il est normal que je ne dispose pas de la conso journalière pour l'instant.
En effet, la fonctionnalité n'est pas disponible pour l'instant sur mon compte.
En conséquence, dans mon espace GRDF je n'ai que les relevés sur 3 mois.

Il n'y a plus qu'a attendre car je serai prévenu via l'espace des nouvelles fonctions.
Domoticz on RPi : Prises, Volets, Temp, Conso (via Shelly), Contacts et mouvements Meian
Contrôles : Volets , Lumières (Script IP, capteurs MVT), Alarmes (heures, mobiles...), Poêle ETNA (via ESP), Clim (via plugin Tuya)
Lanfeust_dsn
Messages : 1
Inscription : 05 janv. 2019, 18:04

Re: Récupérer ses informations de consommation électriques via l'API GRDF

Message par Lanfeust_dsn »

Bonjour à tous,

Merci pour ce script super utile (enfin si j'arrive à le faire marcher...)

lorsque je teste voici le log que j'ai:

2019-01-05 17:59:47,326 logging in as xxx@hotmail.com...
2019-01-05 17:59:47,383 Starting new HTTPS connection (1): monespace.grdf.fr
2019-01-05 17:59:51,910 logged in successfully!
2019-01-05 17:59:51,911 retrieving data...
Traceback (most recent call last):
File "/home/pi/domoticz_gaspar/gaspar_json.py", line 179, in <module>
main()
File "/home/pi/domoticz_gaspar/gaspar_json.py", line 124, in main
dtostr(today))
File "/home/pi/domoticz_gaspar/gaspar.py", line 143, in get_data_per_month
return _get_data(session, 'Mois', start_date, end_date)
File "/home/pi/domoticz_gaspar/gaspar.py", line 283, in _get_data
d = md.group(1)
AttributeError: 'NoneType' object has no attribute 'group'

nodejs et npm sont en version 11.6, winston en 3.1.0

mon compte grdf affiche bien les données par mois, semaine et jour

je ne sais pas d'ou viens le problème.

merci pour votre aide
Répondre