Votre avis ? Infos compteur Linky
#12
c'est encore plus galère que je ne le pensais et les doc sont à C......

après de moult tentatives en utilisant cette P...n de solution Oauth2 du connecteur HTTP, il s'avère qu'elle est codée avec les pieds et ne permet pas de suivre le déroulé des ordres prévus par Enedis (ni par cozytouch Harhar1-4079 , si certains voit ce que je veux dire).

alors il faut juste ne rien demander au connecteur et laisser tout faire ensuite à la main dans l'équipement, pas d'auth, pas de commande initiale, pas de token, juste l'URL principale : https://gw.hml.api.enedis.fr pour permettre au connecteur de mettre au "vert"

maintenant que cette étape est passée on va tout coder dans l'équipement .

commande 1:  authorize en GET ==> qui va utiliser l'API authorize V1  (l'ancienne est dépréciée)  donc comme le dit leur doc /dataconnect/v1/oauth2/authorize , mais NON c'est /group/espace-particuliers/consentement-linky/oauth2/authorize qu'il faut mettre dans la partie commande en plus des arguments demandés

avec mes codes ça donne :
/group/espace-particuliers/consentement-linky/oauth2/authorize?client_id={CLIENT-ID reçu}&state=E3JJFH4&duration=P6M&response_type=code

IL faut impérativement ouvrir le LISTENER pour le connecteur pour récupérer les infos et les utiliser par la suite.

On va récupérer (sauvegarder à côté) la partie code={le code à copier} et usage_point_id={usage_point_id à copier}

le retour est comme suit:
<html lang="fr"><head> <meta charset="utf-8" /></head><body> <p>Veuillez patienter...</p> <script type="text/javascript"> /** * Delete cookies (iPlanetDirectoryPro, amlbcookie) */ function removeCookie(cookieName) { cookieValue = ""; cookieLifetime = -1; var date = new Date(); date.setTime(date.getTime() + (cookieLifetime*24*60*60*1000)); var expires = "; expires=" + date.toGMTString(); document.cookie = cookieName+"=" + JSON.stringify(cookieValue) + expires+"; path=/; domain=.enedis.fr"; } removeCookie("iPlanetDirectoryPro"); removeCookie("amlbcookie"); /** * Parse url query */ var parseQueryString = function( queryString ) { var params = {}, queries, temp, i, l; // Split into key/value pairs queries = queryString.split("&"); // Convert the array of strings into an object for ( i = 0, l = queries.length; i < l; i++ ) { temp = queries[i].split('='); params[temp[0]] = temp[1]; } return params; }; var url = "http://votre_ld_ip:8080/Domobox/OAuth?code=rdIm0UMhWC3KtTf4Mp1bkDMcQ3Z1sD&state=E3JJFH4&usage_point_id=42900589957123"; // Get redirect_uri params var queryString = url.substring( url.indexOf('?') + 1 ); var params = parseQueryString(queryString); var forceNonAutomaticClose = params.close !== undefined && params.close == 'false'; // Avoid closing popup if (forceNonAutomaticClose || !this.window.opener || this.window.opener.closed) { this.window.location.href = url; } else if (this.window.opener && !this.window.opener.closed) { // Close popup this.window.opener.location.href = url; this.window.close(); } </script></body></html>
{ "error" : "unauthorized_client", "error_description": "Code not found in authorization_codes store", "error_uri" : ""}

malheureusement le parseur JS ne permet pas de décoder cette page HTML et donc de stocker les infos dans des variables.


commande 2:  token en POST , il va falloir utiliser ces infos pour faire une nouvelle requête en POST avec des données dans paramètre:
la commande : command='/v1/oauth2/token?redirect_uri=http://Votre_LD_IP:8080/Domobox/OAuth'
(contrairement à ce que dit la doc enedis il faut impérativement ajouter la partie redirect_uri sinon code erreur 500 assuré!!!)
et avec çà (les atheniens s'éteignir) il faut ajouter dans la partie paramètre les données demandées :
grant_type=authorization_code&client_id=[en dur le CLIENT_ID reçu par mail]&client_secret=[en dur le CLIENT_SECRET reçu par sms]&code=[en dur le fameux code que vous avez sauvegardé avec la réponse précédente]

==> j'insiste EN DUR , ça veut dire la valeur et pas une variable $(client_id) dans laquelle vous avez stocké la valeur   ==> ça ne fonctionne pas (s'aurait été trop simple Evil-1617 )  - BUG ou pas comme c'est décrit dans la doc lifedomus !!! j'ai posé la question , mais je m'attends pas à une réponse (oui mode furax Icon_thunder-20740 )
dans entête :
Content_type : application/x-www-form-urlencoded

là on va recevoir un retour qu'on peut utiliser avec le parseur JS , mais concrètement ça sert à rien parce que ensuite on ne peut pas utiliser les variables stockées dans la partie paramètre !  donc il faut les sauvegarder à côté

{ "access_token": "tvT5ony1e1NOSnrtbTygEyj3mDkLwEXUuT8X2kH1KS3kggDfJbguJ4", "token_type": "Bearer", "expires_in": 12600, "refresh_token": "3ylOeRO6mgKAfWG86RnjJgrVOK1fo5hpevUKlTvBUrDc54", "scope": "/v3/customers/usage_points/addresses.GET /v4/metering_data/production_load_curve.GET /v4/metering_data/consumption_load_curve.GET /v3/customers/usage_points/contracts.GET /v4/metering_data/daily_production.GET /v3/customers/contact_data.GET /v4/metering_data/daily_production_max_power.GET /v4/metering_data/daily_consumption.GET /v4/metering_data/daily_consumption_max_power.GET /v3/customers/identity.GET", "refresh_token_issued_at": "1584784198878", "issued_at": "1584784198878"}

il va falloir aussi faire le calcul de quand expire le token pour le rafraichir si expiré dans le parseur:
var obj_token = JSON.parse(trame);   
var expires_At = new Date(parseInt(obj_token.expires_in, 10) * 1000 + parseInt(obj_token.issued_at, 10));  

commande 3: refresh_token en POST
if (expires_At < new Date()) {ldprint("token valide expire à " + expires_At);}
else {command='/v1/oauth2/token?redirect_uri=http://votre_ld_ip:8080/Domobox/OAuth' }
dans paramètre:
grant_type=refresh_token&client_id=[votre client_id]&client_secret=[votre client_secret]&refresh_token=[le refresh_token sauvegardé]
dans entête :
Content_type : application/x-www-form-urlencoded
On reçoit un nouveau access_token et refresh_token ==> à sauvegarder

commande 4:  consommation du jour (ou les autres demandes de conso)
command='/v4/metering_data/consumption_load_curve?usage_point_id=42900589957123&start=2020-01-01&end=2020-01-02';
dans entête:
Accept :  application/json
Authorization: Bearer [le dernier access_token sauvegardé]


voilà ça fonctionne mais c'est pas beau !!!!! Shutup-19de

on peut faire avec mais c'est beaucoup de manip manuelles compte tenu des BUG Lifedomus ==> si on peut corriger le BUG alors ça devient envisageable fortement sans serveur à côté.

Pour simplifier il faudrait écrire un programme en php sur un serveur à côté qui va faire toutes les requêtes et ensuite dialoguer en ce serveur et le LD comme le fait @jojo pour le connecteur NEST (le plus compliqué sera d'écrire la partie Enedis.class.php, le reste  - dialogue avec la class et le LD devrait être plus simple puisque on pourra s'inspirer fortement du programme Nest.php)
Répondre


Messages dans ce sujet
Infos compteur Linky - par Al_Bla - 03-13-2020, 12:07 PM
RE: Infos compteur Linky - par sud-domotique-expert - 03-13-2020, 12:16 PM
RE: Infos compteur Linky - par Al_Bla - 03-13-2020, 12:21 PM
RE: Infos compteur Linky - par Jlr - 03-13-2020, 12:31 PM
RE: Infos compteur Linky - par Al_Bla - 03-13-2020, 12:37 PM
RE: Infos compteur Linky - par Al_Bla - 03-14-2020, 12:33 PM
RE: Infos compteur Linky - par jdrenne - 03-14-2020, 12:58 PM
RE: Infos compteur Linky - par Al_Bla - 03-15-2020, 03:45 PM
RE: Infos compteur Linky - par Jlr - 03-15-2020, 06:38 PM
RE: Infos compteur Linky - par sud-domotique-expert - 03-16-2020, 01:28 AM
RE: Infos compteur Linky - par Al_Bla - 03-16-2020, 12:16 PM
RE: Infos compteur Linky - par sud-domotique-expert - 03-21-2020, 06:14 PM
RE: Infos compteur Linky - par Al_Bla - 03-22-2020, 04:25 PM
RE: Infos compteur Linky - par Jlr - 03-23-2020, 01:00 AM
RE: Infos compteur Linky - par Al_Bla - 03-23-2020, 01:22 PM
RE: Infos compteur Linky - par Ives - 03-23-2020, 02:30 PM
RE: Infos compteur Linky - par Jlr - 03-23-2020, 01:48 PM
RE: Infos compteur Linky - par sud-domotique-expert - 03-23-2020, 04:51 PM
RE: Infos compteur Linky - par sud-domotique-expert - 03-25-2020, 06:04 PM
RE: Infos compteur Linky - par Intellencia - 03-29-2020, 05:43 PM

Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Compteur électrique Ives 10 15,520 06-18-2019, 08:16 AM
Dernier message: Ives
  DPT Compteur electrique Ives 0 2,834 03-19-2017, 05:43 PM
Dernier message: Ives
  [RESOLU] Compteur d'eau - valeur toujours 0 beit 14 19,976 04-14-2015, 12:00 PM
Dernier message: QuentinD
  compteur eau com@home 4 8,622 02-12-2015, 12:32 AM
Dernier message: com@home



Utilisateur(s) parcourant ce sujet : 1 visiteur(s)