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 ?