Votre avis ? Infos compteur Linky
#11
(03-16-2020, 01:28 AM)sud-domotique-expert a écrit : je viens de regarder pour mettre en place l'API (chez un ami qui a un linky)

d'abord c'est très contraignant,
- il faut créer un compte, puis faire une demande de mise en place d'une application ==> jusque là ça me semble normal
- mais la demande n'est pas automatique, à la mode Enedis (pourquoi faire simple quand on peut faire compliqué) tu la poste (envoi d'un mail) puis tu attends (tu attends, tu attends, tu attends, ......) que enedis veuille bien te répondre

(vous l'aurez compris) ET pour l'instant j'attends !!!!!!!!!

Effectivement, hier j'ai essayé de créer un compte, mais je ne suis pas arrivé à m'identifier avec les données de ma carte d'identité sur le site ENEDIS, sur un champ, il me dit le premier caractère doit être un chiffre, chez moi c'est 5, pour lui ce n'est pas un chiffre... donc j'attends un code par courrier, avec le COVID-19 on peut attendre...
sur mon domoticz PC j'ai réussi a implémenter le matériel Linky, mais sans identifiant fiasco...
J'attends les identifiants....!!!
C'est en cherchant que l'on trouve...
Al_Bla
Répondre
#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
#13
Salut JL,
Un vrai labyrinthe domotique, avec peut-être un raspberry cela sera beaucoup mieux.
Donc je vais attendre d'acheter le PI 4.
Merci pour ton investissement.
C'est en cherchant que l'on trouve...
Al_Bla
Répondre
#14
Si c'est pour un câble qu'il te manque entre le linky et la maison, ne serait-il pas plus simple d'utiliser ce lien 
https://easydomoticz.com/raspberry-et-teleinfo/
et d'utiliser des ESP8366 en WiFI pour récupérer les infos directement à partir du linky.... Comme cela tu aurais directement tes infos en temps réel,
celles qui sont envoyés à EDF??? le coût serait imbattable.

Autre lien plus à jour:
http://sarakha63-domotique.fr/nodemcu-te...tion-wifi/
Répondre
#15
(03-23-2020, 01:00 AM)Jlr a écrit : Si c'est pour un câble qu'il te manque entre le linky et la maison, ne serait-il pas plus simple d'utiliser ce lien 
https://easydomoticz.com/raspberry-et-teleinfo/
et d'utiliser des ESP8366 en WiFI pour récupérer les infos directement à partir du linky.... Comme cela tu aurais directement tes infos en temps réel,
celles qui sont envoyés à EDF??? le coût serait imbattable.

Autre lien plus à jour:
http://sarakha63-domotique.fr/nodemcu-te...tion-wifi/

je crois qu'il y a une limitation de distance, environ 30 mètres.
Mon compteur est à 62 mètres de la maison dans un boitier extérieur standard et de plus le câble 3x 1,5 que j'ai mis en attente pour les heures creuses que je n'utilise pas n'a pas été câblé par EDF, je pense qu'il faut déplomber le compteur pour faire le câblage.
Trop de souci, surtout en cette période.
Merci pour tes infos.
C'est en cherchant que l'on trouve...
Al_Bla
Répondre
#16
Dommage.... Cela aurait été plus simple....
Répondre
#17
(03-23-2020, 01:22 PM)Al_Bla a écrit : je crois qu'il y a une limitation de distance, environ 30 mètres.
Mon compteur est à 62 mètres de la maison dans un boitier extérieur standard et de plus le câble 3x 1,5 que j'ai mis en attente pour les heures creuses que je n'utilise pas n'a pas été  câblé par EDF, je pense qu'il faut déplomber le compteur pour faire le câblage.
Bonjour Al_Bla
As-tu envisagé la solution du report avec ce type de produit ? Sur le compteur, les bornes de télé-information sont disponibles sans avoir à déplomber le compteur.
Répondre
#18
j'ai eu le support enedis et j'ai finit (avec leur aide) par mettre au point un serveur php, je suis au milieu mais globalement , je sais me connecter, obtenir le token et passer des ordres qui me ramènent les données.
je me suis m'inspirer de ce qu'à fait @jojo pour le NEST (un grand merci à lui pour cette 1ère) et maintenant établir le dialogue avec le connecteur écoute de LD et permettre d'envoyer des ordres à partir d'un connecteur HTTP de LD.

comme je n'ai pas de linky chez moi disponible , j'aurais besoin a un moment que al_bla me passe ses codes pour tester en production, pour l'instant je n'en ai pas besoin je peux travailler sur leur environnement bac à sable.

ça va fonctionner de la même manière que le NEST :
- 1 serveur PHP sur un NAS, linux, ou machine qui sait servir du code PHP en exécutable via un serveur web.
- 1 connecteur HTTP sur lifedomus dédié à la connection Enedis pour envoyer les ordres de connexion et les ordres de demandes de données
- 1 connecteur universel écoute pour recevoir les retours d'infos transmises par le serveur PHP.

puis ensuite les équipement qui vont bien -
- 1 équipement universel associé au connecteur écoute
- 1 équipement universel associé au connecteur HTTP

je continue dans cette voix seulement si c'est utile à quelqu'un, ça nécessite quand même pas mal d'heures de dev et mises au point (enfin c'est pas ce qu'il me manque ces temps-ci)
Répondre
#19
bien voilà le programme fonctionne , il est pour l'instant connecté au bac à sable de endis pour avoir des données
si il y a besoin d'aller pus loin alors il faut un vrai compte et les données qui vont avec (client_id, client_secret)

   


les boutons à froite et à gauche sont faits pour 1 clic qui déclenche la requête adhoc , les boutons de gauche peuvent permettre de selectionner un index dans (une date) la liste retournée par enedis, comme je ne peux pas afficher directement la liste dans un équipement ecoute universelle , seule la valeur désignée par l'index est affichée.
Répondre
#20
Bonjour à tous,

Pour information, j'ai également du récupérer le token par une commande dans l'équipement, par contre la récupération de la variable dans l'en-tête fonctionne bien Yahoo-1ea1  :

   

Par contre pas dans l'envoi en paramètres... Evil-1617 

Mais bon c'est déjà ça... Ca évite de mettre le token en dur
Répondre


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



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