Collecte données GRDF - Gazpar via NodeRed

Mon problème

Je voudrais réaliser un système équivalent à celui que j’ai mis en place avec ma consommation électrique : récupération des informations et traitement dans node-red pour envoi dans influxdb.

J’ai cru comprendre que la collecte en physique sur le compteur gaz était complexe/compliqué du coup j’ai trouvé une solution alternative pour l’instant qui me conviendrait et qui se baserait sur le projet github GitHub - frtz13/homeassistant_gazpar_cl_sensor: Importer la consommation journalière et index de consommation de gaz dans Home Assistant

L’idée est donc :

  1. De se connecter à mon compte GRDF
  2. De faire un appel API qui récupère la valeur de la consommation de J-2
  3. D’envoyer cette valeur directement dans influxDB
  4. De créer un sensor dans Home Assistant pour afficher les valeurs collectées au fur et à mesure

Et tout ceci directement dans NodeRed ce qui me permettra si je me lance dans la connexion « physique » à mon compteur de pouvoir réutiliser toute la mécanique de traitement/stockage déjà en place avec NodeRed.

J’ai donc lu tout le code du projet github et tenter de reproduire les mêmes actions dans Node Red après avoir lu la documentation node-red directement : Set a request header : Node-RED

Mon problème est que je suis coincé dès l’étape 1 xD
En effet dans NodeRed je n’arrive pas à réaliser la requête HTTP car j’ai un message d’erreur :
status: 415 / error: « Unsupported Media Type » / message: «  »

Mon code node red « set payload and headers »

msg.payload = "data to post";
msg.headers = {};
msg.headers['User-Agent'] = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N)  AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/61.0.3163.100 Mobile Safari/537.36';
msg.headers['Accept-Encoding'] = 'gzip, deflate, br';
msg.headers['Accept'] = 'application/json, */*';
msg.headers['Connection'] = 'keep-alive';
msg.headers['domain'] = 'grdf.fr';
msg.headers['Content-Type'] = 'application/json';

return msg;

J’ai donc bien initialisé le header avec « Content-Type » en « application/json » donc je ne comprends pas le message d’erreur qui indique « mauvais format ».

Bonjour,
Avez-vous trouvé une solution ?

Bonjour, malheureusement pas encore …

Edit : Je suis vraiment dans le flou total … Si quelqu’un à une piste je suis preneur :frowning:

Je pensais avoir trouvé la solution en configurant les Headers directement dans les composants
nodered_headers

Dans la 1ère requête de la page d’accueil tout se passe bien (en même temps il n’y pas vraiment d’interaction). Par contre la 2ème me met toujours des messages d’erreurs 415 … alors que j’ai semble-t-il bien un header[‹ Content-Type ›] = application/json comme je peux le voir dans le message debug :

Help please :frowning:

Bonjour,

Avez-vous résolu votre problème ?

Bonjour,
Malheureusement, toujours pas de solution.

Je réalise la récupération de mes données via l’api de Grdf, via une adaptation personnelle du code de « Scrat » mais, ne connais pas NodeRed par contre.

De mon coté, j’ai pour l’url: ‹ https://login.monespace.grdf.fr/sofit-account-api/api/v1/auth ›
dans le « hearders »:

headers = {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'domain': 'grdf.fr',
            'Referer': 'https://login.monespace.grdf.fr/mire/connexion?goto=https:%2F%2Fsofa-connexion.grdf.fr:443%2Fopenam%2Foauth2%2FexterneGrdf%2Fauthorize%3Fresponse_type%3Dcode%26scope%3Dopenid%2520profile%2520email%2520infotravaux%2520%252Fv1%252Faccreditation%2520%252Fv1%252Faccreditations%2520%252Fdigiconso%252Fv1%2520%252Fdigiconso%252Fv1%252Fconsommations%2520new_meg%2520%252FDemande.read%2520%252FDemande.write%26client_id%3Dprod_espaceclient%26state%3D0%26redirect_uri%3Dhttps%253A%252F%252Fmonespace.grdf.fr%252F_codexch%26nonce%3D7cV89oGyWnw28DYdI-702Gjy9f5XdIJ_4dKE_hbsvag%26by_pass_okta%3D1%26capp%3Dmeg&realm=%2FexterneGrdf&capp=meg'
            }

et dans pour le playload:

payload = {
           'email': userName,
           'password': password,
           'goto':'https://sofa-connexion.grdf.fr:443/openam/oauth2/externeGrdf/authorize?response_type=code%26scope=openid%20profile%20email%20infotravaux%20%2Fv1%2Faccreditation%20%2Fv1%2Faccreditations%20%2Fdigiconso%2Fv1%20%2Fdigiconso%2Fv1%2Fconsommations%20new_meg%20%2FDemande.read%20%2FDemande.write%26client_id=prod_espaceclient%26state=0%26redirect_uri=https%3A%2F%2Fmonespace.grdf.fr%2F_codexch%26nonce=7cV89oGyWnw28DYdI-702Gjy9f5XdIJ_4dKE_hbsvag%26by_pass_okta=1%26capp=meg', 
           'capp':'meg'
           }

userName et password sont de variable à remplacer par vos valeurs.

Si cela peut vous aider …

Merci beaucoup car c’est très utile. Je ne suis pas un spécialiste.

En effet pour NodeRed dans notre cas, je pense qu’il faut surtout remplacer la valeur de ['Content-Type'] comme tu l'indiques.

Je crois qu’il faut mettre comme toi :
` msg.headers["content-type"] = "application/x-www-form-urlencoded"; `

Voici le résultat :

payload: object
state: "SUCCESS"
actualLockoutDuration: 0
displayCaptcha: false
redirectUrl: "https://sofa-connexion.grdf.fr:443/openam/oauth2/externeGrdf/authorize?response_type=code%26scope=openid%20profile%20email%20infotravaux%20%2Fv1%2Faccreditation%20%2Fv1%2Faccreditations%20%2Fdigiconso%2Fv1%20%2Fdigiconso%2Fv1%2Fconsommations%20new_meg%20%2FDemande.read%20%2FDemande.write%26client_id=prod_espaceclient%26state=0%26redirect_uri=https%3A%2F%2Fmonespace.grdf.fr%2F_codexch%26nonce=cecc7e37a7770315bf4f54e5fb5dc61c%26by_pass_okta=1%26capp=meg"
surname: "NOM"
name: "Moi"
email: "zoro@outlook.fr"
statusCode: 200
responseUrl: "https://login.monespace.grdf.fr/sofit-account-api/api/v1/auth"
redirectList: array[0]
retry: 0
responseCookies: object
XSRF-TOKEN: object
JSESSIONID: object
CookieSofit: object
ROUTEID: object

Après le « SUCCESS » du POST je ne sais pas continuer avec Node-Red.
Je ne sais pas comment utiliser la session obtenue, pour faire d’autres requêtes GET .

Est-ce que quelqu’un saurait comment faire un GET en utilisant la réponse et les cookies obtenus ?

Bonjour,
Je viens parasiter ce sujet pour vous indiquer ce lien :

Le gars a fait un « capteur » Gazpar tout simple, basé sur un bouton Zigbee et 2 soudures …

Alors oui, ça ne réponds pas du tout à ton problème, mais ça peut être une alternative pour ceux qui se pose la même question.
Et potentiellement, ça marche sur un Linky ?

A+

Le truc avec bouton (zigbee ou autre) qu’envoie un impulse tout les 10 litres et chez moi je voix une diff entre le compteur et les impulses …pour la facture, c’est le compteur a la base donce je préfère une interface avec grdf qui est non/moins accessible cause de leur ‹ captcha ›

Pour info: les données de Linky se fait complètement différent et il y a tant des solutions discutés dans les forums

J’ai finalement utilisé cette technique effectivement par forcément celle du lien mais une équivalente. Je me branche directement au compteur et je vais voir si c’est fiable au niveau des données. Ça permet notamment de s’affranchir d’une api qui peut évoluer n’importe quand, n’importe comment et/ou devenir payante si jamais ça leur chante.

Hello,
Je suis intéressé par ton retour, voir si tu as les même écarts de valeur que Vingerha
Et pour un Linky, c’est BEAUCOUP plus compliqué, c’est dommage !
A+

Le souci avec le capteur zigbee, c’est l’autonomie de la pile qui risque d’être trop juste.

J’attends un câble dédié Gazpar pour tester un esp32 sous esphome et la fonction counter.
Je devrai repiquer l’alimentation pour l’esp à partir de mon portail.

Linky est plus simple pour moi. Il y a plusieurs « kit » possibles et prémonté. Il y a des connecteurs Zigbee a connecte directe et qui te transforme la trame téléinfo en KW/h et tubas juste a créer un sensor. Ou alors tubas des modules qui te servent juste à récupérer la trame et c’est a toi de la décoder et découper (ce que j’ai fait avec du code côté node red mais la effectivement plus complexe quand même).

Je vous fait signe d’ici quelque jours pour le Gazpar il tourne depuis 2 semaines maintenant je dois pouvoir voir s’il y a des écarts avec le fournisseur.

Vérification faite, j’ai 0,2 m3 d’écart entre le compteur Gazpar et mon helper dans HA. C’est pas catastrophique a voir si c’est juste un soucis d’initialisation ou si l’écart se creuse petit à petit