Compteur Linky

Enedis Linky API V5

 Plug-in pour accéder aux données de son compteur Linky.

A propos de ce plug-in

 Afficher les données de sa consommation électrique de la veille.

Principe d'installation

 Le plugin crée plusieurs devices Http, il utilise le point de raccordement (PRM) qui est stockée dans la variable [VAR1].

 A la création du plugin, il vous faudra donner "un consentement" pour accepter l'accès à vos données Linky par la box eedomus.

 Les données sont celles de la veille, mises à jour à minuit.

 Pour cette version le passage par le consentement est obligatoire, même si vous l'aviez déjà réalisé en version précédente.

 Le chargement des données se fait cycliquement via des règles qui sont installées avec le plugin.

 Tous les périphériques sont reconnus lors de l'installation et installés dans les [VAR2] et [VAR3], ces données sont reprises dans les commandes etne doivent pas être modifiées.

NOTA vous pouvez utiliser plusieurs fois le plugin pour créer des périhériques différents si vous avec des PRM (point de raccordement) différents.

Historique

 V1.0 : La version initiale a été faite par connected object puis adaptée par Merguez07.

 V3.2 : décembre 2023, le Plugin a été revisé complètement par jluc2808 et dommarion pour passer à l'API V5 pour les données et l'API V3 pour la gestion du token.

Installation

 Depuis le store eedomus, cliquez sur le bouton Créer situé sous l'icone du plug-in, adaptez le nom et attribuez une pièce . creation plugin enedis

 Cliquez sur cliquer ici pour accepter le transfert de données ENEDIS vers eedomus pour donner votre 'consentement' au programme d'accès à vos données Linky.

 Sur cette nouvelle page cliquez sur J'accède à mon Espace client Enedis ou sur Créer Mon compte Enedis(s'il n'existe pas). accord enedis

 ou

création compte enedis

 Une nouvelle page s'affiche pour vous connecter à votre Compte Enedis validation consentement

 Cocher "je consens librement ....." puis Cliquez sur Valider pour donner votre 'consentement'.

 Une nouvelle page s'affiche avec vore N° de PRM.  Copiez le N° de Point de raccordement (usagepointid) dans votre presse-papier ou dans un fichier, puis reportez cette valeur dans la case prévue "identification du compteur Linky" et cliquez sur le bouton Créer.

 Pour cette version les valeurs d'unité ont été fixées et doivent correspondre aux variables dans le programme. Toutes les modifications dans ces champs sont susceptibles  de casser les logiques de fonctionnement et affichage, si vous souhaitez personnaliser, il vous faut respecter les instructions pour chaque device.

 Le plug-in installe 7 dispositifs.

**Consommation horaire veille Linky** : obligatoirement en W, nommage libre, affiche la courbe de consommation de la veille avec le graphique (à modifier dans son affichage: type affichage=histogramme), la donnée affichée est la dernière de la liste.
**Consommation veille Linky** : oblgatoirement en Texte, nommage libre, affiche la consommation cumulée de la veille.
**Puissance souscrite** : obligatoirement en Texte, nommage libre, affiche la puissance souscrite auprès de votr fournisseur d'electricité pour ce compteur. 
**Heures creuses linky** : obligatoirement en Texte, nommage libre, affiche les heures creuses souscrites et appliquées par votre fournisseur.
**Pic consommation journalière linky** : obligatoirement en Texte, nommage libre, affiche la puissance et la date de votre pic de consommation de la veille.
**Controller token linky** : obligatoirement en Texte, nommage libre, affiche les messages d'erreur ou d'information et permet via 4 actions
"forcer la lecture sur le serveur" des données sur le serveur Enedis-Linky, "Générer un Token" si l'erreur est Invalid Token ou Missing Token, 
"Synchroniser les données depuis le cache" mettre à jour tous les périphériques avec les données en cache, "Effacer les données" supprimer toutes les sauvegardes des données programme. 
Utile notamment après l'installation. 
**Choix du jour linky** : obligatoirement en Texte, nommage libre, sur la base de la sélection de l'interval, affiche pour les consommations de la semaine précédente,
les consommations du mois précédent, les consommations du mois courant: les consommations maximum, minimum, moyenne du mois ou de la semaine précédente, 
ou permet de supprimer toutes les consommations stockées pour les recharger directement à partir du serveur. 
**Choix de l'interval historique linky** : obligatoirement en Texte, nommage libre, permet la sélection de l'interval de données historique, jour précédent, mois courant ou mois dernier.

Principes de fonctionnement

 Les données sont chargées une fois par jour depuis le serveur Enedis/Linky, comme ce sont les données de la veille, elles ne changent pas toute la journée.  C'est le rôle de la règle "Forcer la lecture à 4h du matin Linky: N° usagepointid".  De ce fait, si on fait des appels en cours de journée, ils utiliseront le 'cache' de stockage du 1er appel, la nouvelle requête restera en local sans aller faire de requête sur le serveur distant.  En cas d'erreur ou si vous souhaitez forcer la lecture sur le serveur Enedis/Linky, utiliser l'action "forcer la lecture sur le serveur".  Attention ENEDIS prévient que trop d'appels à l'API risque de bloquer le compte utilisateur. Soyons raisonnable avec les appels à l'API par jour en mode normal.

 La mise à jour des périphériques sera réalisé autoamtiquement suite aux requêtes sur le serveur Enedis. Pour forcer la mise à jour à partir des données du serveur enedis  utilser la commande "forcer la lecture sur le serveur". $emsp;Si vous voulez les données à partir des données locales (cache), utiliser la commande "synchroniser les données depuis le cache ".  Si vous voulez supprimer les données locales, utiliser la commande cachée clean, elle supprime toutes les données dans le XML généré par l'appel issu de 1ère règle.

Premier pas après installation

 Suite à l'installation, vous puvez attendre le lendemain pour avoir vos données ou votre installation est faite entre 4h00 et 23h00  alors vous pouvez forcer la récupération des données de la veille.  Pour cela dans le périphérique "Controller token linky" utilisez la commande "forcer la lecture sur le serveur".

 Il est aussi possible de passer par la fonction test à partir du périphérique "Consommation horaire veille Linky", puis lancer l'execution du test,  cette dernière solution va restituer le xml complet, qui permet de contrôler la bonne exécution de l'ensemble des requêtes,  ainsi que de la bonne consitution des données dans la partie .  Elle ne synchronise aussi les données des autres périphériques, en fonction de la requête utilisée.

Utilisation

 Après l'installation, on peut personnaliser les libellés et les images. Pour cela, respecter les consignes pour chaque device.
 Les requêtes vers le serveur Enedis/Linky sont prévues via une règle, pour ne faire qu'un appel par jour API et qu'un appel au cache.

 Dans "Controller token linky", il a été créé 4 commandes.

 Les commandes :   - Forcer la lecture sur le serveur : va chercher les données sur le serveur enedis (sans tenir compte des données sauvegardées).   - Générer un token : force la reconstitution de l'authorisation (token) et va chercher les données sur le serveur enedis (sans tenir compte des données sauvegardées).   - Effacer les données : cette commande est volontairement cachée va supprimer tooutes les données sauvegardées dans le programme,   cela aussi les données dans les historiques.
  - Synchroniser les données depuis le cache : l'action consiste à mettre à jour les périphériques journaliers.   Elle est utilisée pour déclencher la mise à jour des données sur les autres périphériques (hors les historiques).

 Le périphérique "Choix du jour linky" permet de lancer l'affichage des consommations des jours précédents, du mois courant ou du mois précédent, (appelé interval)  ainsi que les consommation maximum, minimum, moyenne du mois ou des jours précédente ou du mois courant.  L'utilisation de ce périphérique n'entraine pas de requête sur le serveur Enedis, sauf si on a lancé auparavant une commande "clean" auparavant.

Utilisation de l'historique des consommations

 Les données disponibles: 1. les données du mois courant, vont de la veille du jour courant jusqu'au 1er sous la forme J-x (x = 1 étant la valeur de la veille): J-1 étant la veille , J-9 le -10jours 2. les données du mois en cours sous la forme M0-x (mois courant) x étant le jour du mois, M0-3 et le 3 du mois courant 3. les données du mois dernier sous la forme M1-x (x étant le jour du mois dernier), M0-3 et le 3 du mois dernier 4. les données calculée : 1. mini du mois en cours M0min 2. maxi du mois en cours M0max 3. moyenne du mois en cours M0average 4. mini du mois dernier M1min 5. max du mois dernier M1max 6. moyenne du mois dernier M1average

  Pour les utiliser: $emsp;La selection du type d'interval est fait dans le périphérique : Selection de l'interval historique, les valeurs possibles: $emsp; 1. J - permet de choisir les données en compte à rebours depuis aujourd'hui, J-01 pour hier, J-11 pour le 11ème jour précédent aujourd'hui, jusqu'à J-30 $emsp; 2. M0 - pour le mois courant (si par la suite le choix du jour est 01, alors on aura le 01/mois courant(mm)/année en cours (20aa), 07 est le 07/mm/aaaa, jusque 31)   3. M1 - pour le mois dernier (si par la suite le choix du jour est 01 alors on aura le 01/mois dernier(mm)/année en cours (20aa), 07 est le 07/mm/aaaa, jusque 31)   4. la même logique s'applique à min, max, moyenne &emsp: Les commandes vont mettre à jour le choix de l'interval, elles ne déclenchent pas de requêtes sur les données, ce choix restera tant qu'il n'est pas changé.

 Le déclenchement des requêtes 'choix du jour' est fait dans le périphérique : Choix du jour, les valeurs possibles:  on aura les valeurs entre 1 à 31, min, max, moyenne  si l'interval est positionné sur "J" jour précédent, alors le choix 03, donnera J-03, donc 3 jours avant la date courante  si l'interval est positionné sur "M0" mois courant, alors le choix 03, donnera M0-3, donc le 3ème jour du mois courant  si l'interval est positionné sur "M1" mois dernier, alors le choix 03, donnera M1-3, donc le 3ème jour du mois précédent  idem pour min, max, moyenne (Jmax et M0max sont équivalent)  si l'interval est positionné sur "J" jour précédent, alors Jmax, donnera la consommation journalière maximum du mois en cours équivalent à M0max  si l'interval est positionné sur M1 mois dernier, alors M1max, donnera la consommation journalière maximum du mois précèdent  le lançant la commande Choix du jour execute la requête, les restitutions se font dans le périphérique Choix du jour.  Parfois la pletforme eedomus est capricieuse et n'affiche pas directement la valeur restituée, mais garde en affichage la veleur demandée  il sera alors nécessaire de rafraichir la page ou même d'aller consulter l'historique (avec tout afficher) des valeurs pour avoir la donnée restituée.

 On a 2 périphériques pour les historiques, 1 seul sera utilisé pour restituer les données (le sélecteur d’interval lui étant sans restitution, juste un affichage de la valeur sélectionnée)   A l’usage :  on positionne le choix d’interval, ce qui permet de stocker la valeur de l'interval à restituer  on choisit dans le choix du jour (-1 à -31 et min, max, moyenne),il n'y a pas de stockage, et execution de la commande avec le jour choisit.

 Si on veut passer par tester, on aura un mot : &direct=valeur à tester donc J-2 ou M0-2 ou M1max  dans ce cas il n'y aura aucun stockage des valeurs demandées, ceci n’altère pas la valeur "interval" en cours pour la suite, seulement pour le test.  Cette méthode &direct=xx permet, dans un périphérique rattaché, de créer et d'executer vos commandes favorites, la restitution se fera dans tous les cas dans choix du jour.
 &interval=clean force la suppression et le rechargement des données historiques sur le serveur et elle supprime aussi le stockage de la valeur interval.

Règles

 A l'installation il sera créé automatiquement 1 règle

 Règle 1:  "Forcer la lecture à 4h du matin Linky: N° usagepointid"  Elle se déclenche tous les jours à 4h00

Renvoi XML

 Le fichier xml renvoyé peut être visualisé dans la fenêtre de test activée par le bouton tester de la fenêtre du device, puis en cliquant sur le bouton tester de la fenêtre test. Le résultat ressemble à l'exemple ci-dessous :

<?xml version="1.0" encoding="UTF-8"?>
<root><cached>1</cached><customer><customer_id>-1141280757</customer_id>
<usage_points><usage_points><usage_point><usage_point_id>2522xxxxxxxxxxxx</usage_point_id>
<usage_point_status>com</usage_point_status>
<meter_type>AMM</meter_type>
</usage_point>
<contracts><segment>C5</segment>
<subscribed_power>18 kVA</subscribed_power>
<last_activation_date>1995-08-30+02:00</last_activation_date>
<distribution_tariff>BTINFMU4</distribution_tariff>
<offpeak_hours>HC (23H00-7H00)</offpeak_hours>
<contract_type>Contrat Protocole501</contract_type>
<contract_status>SERVC</contract_status>
<last_distribution_tariff_change_date>2023-04-01+02:00</last_distribution_tariff_change_date>
</contracts>
</usage_points>
</usage_points>
</customer>
<meter_reading><usage_point_id>2522xxxxxxxxxxxx</usage_point_id>
<start>2023-11-29</start>
<end>2023-11-30</end>
<quality>BRUT</quality>
<reading_type><unit>Wh</unit>
<measurement_kind>energy</measurement_kind>
<aggregate>sum</aggregate>
<measuring_period>P1D</measuring_period>
</reading_type>
<interval_reading><usage_points><value>60940</value>
<date>2023-11-29</date>
</usage_points>
</interval_reading>
</meter_reading>
<meter_reading><usage_point_id>2522xxxxxxxxxxxx</usage_point_id>
<start>2023-11-29</start>
<end>2023-11-30</end>
<quality>BRUT</quality>
<reading_type><unit>W</unit>
<measurement_kind>power</measurement_kind>
<aggregate>average</aggregate>
</reading_type>
<interval_reading><usage_points><value>996</value>
<date>2023-11-29 00:30:00</date>
<interval_length>PT30M</interval_length>
<measure_type>B</measure_type>
</usage_points>
<usage_points><value>832</value>
<date>2023-11-29 01:00:00</date>
<interval_length>PT30M</interval_length>
<measure_type>B</measure_type>

...

<usage_points><value>1182</value>
<date>2023-11-30 00:00:00</date>
<interval_length>PT30M</interval_length>
<measure_type>B</measure_type>
</usage_points>
</interval_reading>
</meter_reading>
<data>
    <load_access_token>2023-11-30 08:22:28</load_access_token>
    <max_load_curve_consumption_controller_module_id>3155095</max_load_curve_consumption_controller_module_id>
    <max_load_curve_consumption_time>2023-11-29 07:30:00</max_load_curve_consumption_time>
    <max_load_curve_consumption_value>5004</max_load_curve_consumption_value>
    <token_controller_module_id>3156391</token_controller_module_id>
    <daily_consumption_controller_module_id>3148285</daily_consumption_controller_module_id>
    <daily_consumption_count>1</daily_consumption_count>
    <daily_consumption_value>60940 Kwh</daily_consumption_value>
    <daily_cur_consumption_time_txt>2023-11-29 23:59:59</daily_cur_consumption_time_txt>
    <load_curve_consumption_controller_module_id>3148286</load_curve_consumption_controller_module_id>
    <load_curve_consumption_date>2023-11-29</load_curve_consumption_date>
    <load_curve_consumption_load_count>48</load_curve_consumption_load_count>
    <contracts_consumption_controller_module_id>3148284</contracts_consumption_controller_module_id>
    <contracts_subscribed_power>18 kVA</contracts_subscribed_power>
    <contracts_offpeak_hours_controller_module_id>3148927</contracts_offpeak_hours_controller_module_id>
    <contracts_offpeak_hours>(23H00-7H00)</contracts_offpeak_hours>
</data>
</root>

 ou, en mode=reset_cache

<?xml version="1.0" encoding="UTF-8"?>
<root><cached>0</cached><customer><customer_id>-1141280757</customer_id>
<usage_points><usage_points><usage_point><usage_point_id>2522xxxxxxxxxxxx</usage_point_id>

 ou en mode=force_token

<?xml version="1.0" encoding="UTF-8"?>
<root><cached>0</cached><customer><customer_id>-1141280757</customer_id>
<usage_points><usage_points><usage_point><usage_point_id>2522xxxxxxxxxxxx</usage_point_id>
....
<data>
    <generate_access_token>2023-11-30 08:22:28</generate_access_token>
....

XPATH

emsp;Sont //null parce que les données n'utilisent pas cette méthode.

Types

 Les devices par défaut sont de type capteur ou actionneur. Le type par défaut est déterminé automatiquement au moment de la création du device

**Consommation horaire veille Linky** : obligatoirement en W. 
**Consommation veille Linky** : obligatoirement en Texte.
**Puissance souscrite** : obligatoirement en Texte.
**Heures creuses linky** : obligatoirement en Texte.
**Pic consommation journalière linky** : obligatoirement en Texte.
**Controller token linky** : obligatoirement en Texte.
**Choix de l'interval historique linky** : obligatoirement en Texte.
**Choix du jour linky** : obligatoirement en Texte.

 Si les unités ne sont pas standard, le programme ne fonctionnera pas correctement.

Timer

 La requête tourne par défaut tous les jours à 4h00.

Mode cache

  Utilisé dans l'actionneur Controller token linky, force la lecture des données sur le serveur Enedis/Linky.

Mode token

  Utilisé dans l'actionneur Controller token linky, force la génération d'une nouvelle Authorisation (Token) sur le serveur Enedis/Linky.

Mode sync

  Utilisé dans l'actionneur Controller token linky, force l'utilisation des données en cache.

Mode clean

  Utilisé dans l'actionneur Controller token linky, force la supression des données sauvegardées dans le programme Enedis/Linky.

Autres Actions

Mémoire de stockage ou Plusieurs Point de raccordement (PRM)

 La mémoire de stockage est créée automatiquement à l'aide de iddevices de [VAR1], Si [VAR1] contient un autre PRM, on utilise le stockage par PRM.

 Dans le cas de plusieurs Point de raccordement PRM, il faudra créer autant de fois le plugin que de PRM et donner le 'consentement' autant de fois que de PRM .

De-Installation

 Si vous souhaitez deinstaller et supprimer vos périphériques Linky, il y a quelques pré-requis  En premier, il faut supprimer la règle qui est attachée au périphérique.  Une fois cette action réalisée, vous pouvez supprimer les périphériques.