Coder Social home page Coder Social logo

bokub / linky Goto Github PK

View Code? Open in Web Editor NEW
204.0 15.0 20.0 737 KB

🔌 CLI tool to retrieve Linky smart meters data

License: GNU General Public License v3.0

JavaScript 2.88% TypeScript 96.81% Shell 0.31%
linky enedis power consumption api nodejs electricity production

linky's Introduction

Linky

Version Build Status Codecov Downloads Node version Code style

N.B: Because this tool is targeted for french people, the documentation is...in french

Linky CLI

Ce module vous permet de récupérer votre consommation et production électrique Linky via le service Conso API

Il peut s'utiliser de 2 façons :

  1. En ligne de commande
  2. En tant que module Node.js, depuis un autre programme

Notez qu'il vous faut un compteur Linky et un espace client Enedis pour pouvoir utiliser ce module

1. Linky en ligne de commande

Installation

  1. Installez Node.js sur votre machine. La version minimale supportée est Node 16.
  2. Ouvrez un terminal
  3. Installez linky avec npm:
npm i -g linky

Utilisation

Authentification

Avant toute chose, il faudra vous connecter à votre espace client Enedis et leur donner l'autorisation de partager vos données avec une application extérieure

Rendez-vous sur conso.boris.sh pour donner votre accord et récupérer un token

Puis, créez une connexion à votre compte avec la commande suivante :

linky auth --token <votre-token>

Récupération des données

Une fois votre token sauvegardé, vous pourrez récupérer votre consommation quotidienne, votre courbe de charge (consommation par demi-heure), et votre consommation maximale par jour

# RĂ©cupĂšre la consommation quotidienne du 1er au 3 mai 2023
linky daily --start 2023-05-01 --end 2023-05-04

# RécupÚre la puissance moyenne consommée le 1 mai 2023, sur un intervalle de 30 min
linky loadcurve --start 2023-05-01 --end 2023-05-02

# RĂ©cupĂšre la puissance maximale de consommation atteinte quotidiennement du 1er au 3 mai 2023
linky maxpower --start 2023-05-01 --end 2023-05-04

Si vous produisez de l'électricité, vous pouvez également récupérer votre production quotidienne et votre courbe de charge (production par demi-heure)

# RĂ©cupĂšre la production quotidienne du 1er au 3 mai 2023
linky dailyprod --start 2023-05-01 --end 2023-05-04

# RĂ©cupĂšre la puissance moyenne produite le 1 mai 2023, sur un intervalle de 30 min
linky loadcurveprod --start 2023-05-01 --end 2023-05-02

Dates par défaut

En l'absence des paramÚtres --start et --end, vous récupérez la consommation / production / puissance de la veille

# RécupÚre la consommation de la journée d'hier
linky daily

# RécupÚre la puissance moyenne consommée pendant la journée d'hier, sur un intervalle de 30 min
linky loadcurve

# RécupÚre la puissance maximale de consommation atteinte durant la journée d'hier
linky maxpower

# RécupÚre la production de la journée d'hier
linky dailyprod

# RécupÚre la production moyenne consommée pendant la journée d'hier, sur un intervalle de 30 min
linky loadcurveprod

Multi-PRM et multi-token

Si votre token donne accÚs aux données de plusieurs PRMs, vous pouvez préciser le numéro de PRM à utiliser dans chaque commande avec le paramÚtre --prm

# RĂ©cupĂšre la consommation de la veille pour le compteur 111222333
linky daily --prm 111222333

# RĂ©cupĂšre la production de la veille pour le compteur 777888999
linky dailyprod --prm 777888999

Si vous possédez plusieurs tokens, vous pouvez passer l'étape d'authentification et préciser le token à utiliser dans chaque commande avec le paramÚtre --token

# RĂ©cupĂšre la consommation de la veille avec le token aaa.bbb.ccc
linky daily --token aaa.bbb.ccc

# RĂ©cupĂšre la production de la veille avec le token xxx.yyy.zzz
linky dailyprod --token xxx.yyy.zzz

ParamÚtres supplémentaires

Vous pouvez changer le format d'affichage de sortie grĂące au paramĂštre --format

Les formats disponibles sont json, csv et pretty (par défaut)

linky daily --start 2023-05-01 --end 2023-05-02 --format json

Vous pouvez sauvegarder vos résultats dans un fichier en combinant les paramÚtres --output et --format

# Sauvegarde la courbe de charge de la veille au format JSON
linky loadcurve --output chemin/vers/ma_conso.json --format json

# Sauvegarde une semaine de consommation au format CSV
linky daily --start 2023-05-01 --end 2023-05-07 --output chemin/vers/ma_conso.csv --format csv

Vous pouvez masquer les messages et animations de progression grùce au paramÚtre --quiet afin de faciliter l'intégration dans des scripts

linky maxpower --quiet --format json | jq '.interval_reading[0].value'

Pour voir l'aide détaillée et plus d'exemples :

linky --help

2. Linky comme module Node.js

Installation

# Depuis un projet Node.js
npm i linky

Utilisation

import { Session } from 'linky';

// Créez une session à partir du token
const token = 'xxx.yyy.zzz';
let session = new Session(token);

// Si le token permet d'accéder à plusieurs PRMs, vous pouvez préciser celui à utiliser
const prm = '123456';
session = new Session(token, prm);

// Si vous prévoyez de rendre votre application/service/module accessible au grand public,
// ajoutez un User-Agent au format string Ă  la session.
// Celui-ci doit permettre d'identifier l'origine des requĂȘtes envoyĂ©es Ă  Conso API.
session.userAgent = 'Mon super service';

// RĂ©cupĂšre la consommation quotidienne du 1er au 3 mai 2023
session.getDailyConsumption('2023-05-01', '2023-05-04').then((result) => {
  console.log(result);
  /*
    {
      "reading_type": {
        "unit": "Wh",
        "measurement_kind": "energy"
      },
      "interval_reading": [
        { "value": "12873", "date": "2023-05-01" },
        { "value": "12296", "date": "2023-05-02" },
        { "value": "14679", "date": "2023-05-03" }
      ]
    ...
    */
});

// RécupÚre la puissance moyenne consommée le 1er mai 2023, sur un intervalle de 30 min
session.getLoadCurve('2023-05-01', '2023-05-02').then((result) => {
  console.log(result);
  /*
    {
      "reading_type": {
        "unit": "W",
        "measurement_kind": "power"
      },
      "interval_reading": [
        { "value": "752", "date": "2023-05-01 00:30:00" },
        { "value": "346", "date": "2023-05-01 01:00:00" },
        { "value": "250", "date": "2023-05-01 01:30:00" },
        ...
    */
});

// RĂ©cupĂšre la puissance maximale de consommation atteinte quotidiennement du 1er au 3 mai 2023
session.getMaxPower('2023-05-01', '2023-05-04').then((result) => {
  console.log(result);
  /*
    {
      "reading_type": {
        "unit": "VA",
        "measurement_kind": "power"
      },
      "interval_reading": [
        { "value": "4638", "date": "2023-05-01 12:06:20" },
        { "value": "4410", "date": "2023-05-02 19:27:46" },
        { "value": "3570", "date": "2023-05-03 21:42:12" }
      ]
    ...
    */
});

// RĂ©cupĂšre la production quotidienne du 1er au 3 mai 2023
session.getDailyProduction('2023-05-01', '2023-05-04').then((result) => {
  console.log(result);
  /*
    {
      "reading_type": {
        "unit": "Wh",
        "measurement_kind": "energy"
      },
      "interval_reading": [
        { "value": "12873", "date": "2023-05-01" },
        { "value": "12296", "date": "2023-05-02" },
        { "value": "14679", "date": "2023-05-03" }
      ]
    ...
    */
});

// RĂ©cupĂšre la puissance moyenne produite le 1er mai 2023, sur un intervalle de 30 min
session.getProductionLoadCurve('2023-05-01', '2023-05-02').then((result) => {
  console.log(result);
  /*
    {
      "reading_type": {
        "unit": "W",
        "measurement_kind": "power"
      },
      "interval_reading": [
        { "value": "752", "date": "2023-05-01 00:30:00" },
        { "value": "346", "date": "2023-05-01 01:00:00" },
        { "value": "250", "date": "2023-05-01 01:30:00" },
        ...
    */
});

linky's People

Contributors

bokub avatar maelgangloff avatar yadomi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

linky's Issues

install failed sur 2 linux différents

Hello j'ai 2 machines sur lesquelles j'ai tenté un sudo npm i -g linky

sur une machine classique 64 bits (debian like) et raspbian 9, npm 6.14.15
Les deux arrivent au mĂȘme rĂ©sultat : problĂšme sur /usr/lib/node_modules/linky/dist/bin/cli.js

...
4756 silly build [email protected]
4757 info linkStuff [email protected]
4758 silly linkStuff [email protected] has /usr/lib/node_modules as its parent node_modules
4759 silly linkStuff [email protected] is part of a global install
4760 silly linkStuff [email protected] is installed into a global node_modules
4761 silly linkStuff [email protected] is installed into the top-level global node_modules
4762 verbose linkBins [ { linky: 'dist/bin/cli.js' }, '/usr/bin', true ]
4763 timing action:build Completed in 74ms
4764 verbose unlock done using /root/.npm/_locks/staging-a072192f34a17023.lock for /usr/lib/node_modules/.staging
4765 timing stage:rollbackFailedOptional Completed in 287ms
4766 timing stage:runTopLevelLifecycles Completed in 9658ms
4767 verbose stack Error: ENOENT: no such file or directory, chmod '/usr/lib/node_modules/linky/dist/bin/cli.js'
4768 verbose cwd /usr/lib/node_modules
4769 verbose Linux 4.19.0-18-amd64
4770 verbose argv "/usr/bin/node" "/usr/bin/npm" "i" "-g" "linky"
4771 verbose node v12.22.8
4772 verbose npm v6.14.15
4773 error code ENOENT
4774 error syscall chmod
4775 error path /usr/lib/node_modules/linky/dist/bin/cli.js
4776 error errno -2
4777 error enoent ENOENT: no such file or directory, chmod '/usr/lib/node_modules/linky/dist/bin/cli.js'
4778 error enoent This is related to npm not being able to find a file.
4779 verbose exit [ -2, true ]

une idée ?

Erreur d'installation node module sur projet Symfony

Bonjour,

J'essaye actuellement d'integré votre module sur un projet symfony.
AprĂšs l'installation, lorsque je lance mon serveur node via npm, ce dernier trouve 10 erreurs.

Module build failed: Module not found:
"./node_modules/jsonwebtoken/sign.js" contains a reference to the file "crypto".
This file can not be found, please check it for typos or update it if the file got moved.

"./node_modules/jwa/index.js" contains a reference to the file "crypto".
This file can not be found, please check it for typos or update it if the file got moved.

"./node_modules/jwa/index.js" contains a reference to the file "util".
This file can not be found, please check it for typos or update it if the file got moved.

"./node_modules/jws/lib/data-stream.js" contains a reference to the file "stream".
This file can not be found, please check it for typos or update it if the file got moved.

"./node_modules/jws/lib/data-stream.js" contains a reference to the file "util".
This file can not be found, please check it for typos or update it if the file got moved.

webpack compiled with 10 errors

J'ai donc installer les package manquant :

  • npm i util
  • npm i stream
  • npm i crypto-browserify

Puis j'ai modifier ma config webpack afin de chargé "crypto-browserify" à la place de "crypto".

` [...]
module.exports = Encore.getWebpackConfig();

module.exports.resolve.fallback = {
crypto: require.resolve('crypto-browserify')
};
`

À ce stade, mon serveur ce lance sans erreur, mais lorsque j'essaye le module, je ne rĂ©cupĂšre aucune donnĂ©es et j'ai ce message dans la console : " Uncaught ReferenceError: process is not defined "

edit

J'ai effectué :
npm i process

puis dans le fichier webpack.config.js j'ai ajouter deux lignes :

const webpack = require('webpack');
.addPlugin(new webpack.ProvidePlugin({
process: 'process/browser',
}))

Maintenant j'ai un problĂšme avec la requĂȘte, cette derniĂšre est bloquĂ© par le header : Cross-Origin Request.

J'ai essayé de modifier ma config sur cette parti mais rien n'y fait.
Je continu les recherches de mon cÎté, j'éspÚre trouver une solution.

Consommation de la veille

Bonjour,

Supposons que nous soyons le 19.05.2022 et que l'on veuille récupérer les consommations journaliÚres jusqu'à la veille.

  1. Essayons cela :
    getDailyConsumption( 2022-05-15 , 2022-05-19 )
    Error: Invalid request: The end date parameter must be earlier than the current date.
    => La borne de fin ne peut ĂȘtre la date du jour, admettons...

  2. Et ceci :
    getDailyConsumption( 2022-05-15 , 2022-05-18 )
    {
    unit: 'Wh',
    data: [
    { date: '2022-05-15', value: 8162 },
    { date: '2022-05-16', value: 7335 },
    { date: '2022-05-17', value: 3674 }
    ]
    }
    => Ca fonctionne, mais de fait la consommation de la veille n'est pas incluse puisque la borne supérieur est exclue.

Ca signifie que l'on ne peut pas récupérer la consommation de la veille ?

Unexpected identifier

AprĂšs une installation avec npm i -g linky j'ai cette erreur :

file:///home/bohwaz/.local/lib/node_modules/linky/dist/bin/cli.js:7
import pkg from '../package.json' assert { type: 'json' };
                                  ^^^^^^

SyntaxError: Unexpected identifier
    at Loader.moduleStrategy (internal/modules/esm/translators.js:133:18)
    at async link (internal/modules/esm/module_job.js:42:21)

Plusieurs compteurs

Bonjour,
Merci pour ce package !
Je l'utilise pour récupérer les données de mon compteur principal mais je possÚde un deuxiÚme compteur et j'aimerai savoir si il est possible de switcher de compteur sans devoir refaire un "auth" ?
J'ai un certain nombre de Rpi qui prennent la poussiĂšre et je pourrai donc en utiliser un par compteur mais j'aimerai tout avoir sur le mĂȘme.
Merci d'avance.

Erreur 403 sur maxpower

Bonjour,

La commande :
linky maxpower -s 2020-10-27 -e 2020-10-29

me retourne toujours un 403 :

pi@skupi:~ $ linky maxpower -s 2020-10-27 -e 2020-10-29 
✖ Error from the Enedis API
Code: 403
Response: ""

Je peux bien les voir pourtant sur mon espace client. Par contre, aucun problĂšme avec daily.

Question un peu parallĂšle : j'ai remarquĂ© que si je refais un linky auth avec les mĂȘmes credentials, les appels suivants ne marche plus Ă  cause d'une invaliditĂ© des credentials. Je suppose que le fait de refaire un linky auth supprime les credentials actuels et il faut donc en regĂ©nĂ©rer de nouveau via conso.vercel.app.
Si je dois intĂ©grer la lib dans un projet node.js, l'appel Ă  la mĂ©thode Session() Ă  chaque lancement de mon app ne risque pas de provoquer le mĂȘme problĂšme ?

Merci.

Homebridge plugin ?

Hello,

Je découvre cet utilitaire, je me permets de soumettre une idée.
De plus en plus de personnes adoptent Apple Homekit avec/sans passerelle Homebridge.

Ton utilitaire est un des seuls que j'ai trouvé pour récupérer les données d'un compte Linky.
Je ne suis pas développeur mais s'il y avait un plugin : homebridge-linky par exemple, ça ferait des milliers d'heureux.
Ce plugin récupÚrerait les infos comme tu le fais déjà et les mettrait à disposition via un plugin "homebridge".

Sous iOS, il existe une application EVE (Elgato) . Certains développeurs utilisent ce module pour historiser :
https://www.npmjs.com/package/fakegato-history

Ca permet d'historiser des valeurs et de les afficher directement dans l'app EVE sous forme de graphique.
Ci joint un exemple de plugin qui permet de tester sa connexion internet et d'historiser les valeurs : https://www.npmjs.com/package/homebridge-speedtest-net

Guillaume

lincs-internal-server-error

Bonjour et merci pour cette librairie tout Ă  fait utile.

En essayant de rĂ©cupĂ©rer mes jetons d'accĂ©s via conso.vercel.app, j'obtiens l'erreur lincs-internal-server-error aprĂšs m'ĂȘtre logguĂ© sur Enedis et renseignĂ© mon PDL Ă  rĂ©cupĂ©rer.

Avez vous une idée de la source d'erreur?

Merci

Screen Shot 2021-01-11 at 2 41 23 PM

Erreurs lors des premiers essais

Hello ! TrÚs enthousiaste quant à ce projet, je viens d'installer le package et essayer de l'utiliser de façon simple, j'ai des erreurs malgré la confirmation de Enedis et de la commande auth.
Une idée ?

image

Merci !

merci de ce taf

ça fonctionne impec, merci.
y aurait il une possibilité de faire une sortie "csv" ou "xls" en plus du json?
merci d'avance
bonne journée

connexion linky

ce matin je continus avec node js et cmd
j'ai demandé des nouveaux TOKENs car j'ai lu que ceux ci n'était valable que quelques heures avant que j'ai au moins réussi une connexion puis qu'il soit régénéré automatiquement

j'ai lancé la commande

C:\Users\Acer>linky auth -ajT3tCGZG4tVC1R9daQam2JQ75SGUzegxj0M6td2ak0HCkJ05WVWCRn -r1lbBlBiVwFngWHaWfdYLQc7Ucstxd5XxzJStzDoU8QO8io -u14609551361984

mais j'ai eu une réponse que je ne comprends pas

The flag --accessToken can only be set once.

fallait-il que je demande des nouveaux Tokens ?? j'essaye de suivre l'aide en ligne

ci joint le fichier log qui je pense correspond Ă  cette manip
2021-12-24T09_55_17_508Z-debug-0.log

Conso API erreur ADAM-DC-0008

Bonjour,

lorsque j'interroge ma production quotidienne j'obtiens l'erreur suivante:

C:\Users\patki>linky_ dailyprod
× Conso API a rĂ©pondu avec une erreur
× Code: 403
× RĂ©ponse: {
"status": 403,
"message": "The Enedis API returned an error",
"error": {
"error": "ADAM-DC-0008",
"error_description": "No consent can be found for this customer and this usage point."

Quelqu'un connait il la signification de ce message?

Sur l'application mobile ou web tout est OK je vois bien ma production journaliĂšre.

Pat

requĂȘte : erreur 500 sans NodeJS

Bonjour :D

merci pour ce travail, ça fonctionne trÚs bien avec NodeJS et le rendu terminal est génial :)
J'essaye de reproduire cela en C pour de l'embarqué et je me heurt à un soucis...

J'ai reproduit la construction de l'url en suivant le code pour obtenir cela :
"https://gw.prd.api.enedis.fr/daily_consumption?start=2022-12-01&end=2022-12-03&usage_point_id=XXMonSuperUsagePointXX"
en ajoutant le headers :
headers = { "Authorization": "Bearer XXMonSuperTokenXX", "Content-Type": "application/x-www-form-urlencoded", "Accept": "application/json" }

Mais la réponse est constamment une erreur 500.
En testant avec nodeJS (mĂȘme tokens) tout semble fonctionner.

Qu'ai-je oublié ?

Merci d'avance :)

PS:

  • Avec et sans "Bearer" dans l'authorization
  • J'utilise postman et requests() de python3 pour tester les requĂȘtes

[Feature request] Export au format CSV

Bonjour Boris,

Serait-il possible de rajouter un export au format CSV, avec possibilitĂ© de rajouter ou non les entĂȘtes de colonnes ?
L'idée est de pouvoir rendre les données accessible à un proche en situation de handicap visuel.

Bon week-end 😃
WikiJM

Erreur de login sur conso.vercel.app

Ca fait plaisir de voir ce genre de projet ! J'essaie depuis hier soir de m'authentifier sur https://conso.vercel.app/ mais Ă  chaque fois j'ai l'erreur :

Le serveur d'Enedis a mis trop longtemps à répondre. Rafraichissez la page (F5) pour réessayer, ou revenez plus tard.

Vous avez une idée ?

génération de token erreur 404

Hello,

À la recherche d'un utilitaire pour suivre mes donnĂ©es de consommations depuis mon terminal, j'ai atterri sur ce projet qui me semble tout Ă  fait adĂ©quat.

Malheureusement, je tombe sur une erreur 404 lors du processus de génération de token via conso.vercel.app
La redirection vers enedis se fait bien, je valide le partage des données, la callback tombe en 404 cÎté vercel :

screenshot

image

Sinon, 👍 pour l'outil qui semble top

messqge d'erreur avec le module nodejs

Bonjour ,
je rencontre un souci avc le module nodejs j'obtiens les messages d'erreur suivant:

Code: 401
Response: {
    "error": "Unauthorized",
    "error_description": "Valid authentication credentials are mandatory to access the resource."
}
    at /home/pi/js/node_modules/linky/dist/src/index.js:99:23
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:16286) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 5)
(node:16286) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
(node:16286) UnhandledPromiseRejectionWarning: Error: Cannot refresh token

En revanche cela fonctionne parfaitement avec le module cli, j'en deduis donc que les tokens sont corrects.
Avez vous une idee de l'origine du probleme?
merci
Bonne journee
Nico

Erreur "Sorry, you have been blocked"

Bonjour. Merci pour votre travail.
J'utilise Nodered pour me connecter Ă  votre API.
Les premiers tests ont été tout à fait concluants.
J'ai maintenant un message de Cloudflare "Sorry, you have been blocked".
Pouvez-vous me dire comment me dé-blacklister.
Merci.

Converting circular structure to JSON

Bonjour,

Tout d'abord, un grand merci pour ton travail! Quand le site d'Enedis fonctionne, c'est que du bonheur!
Depuis ce matin, j'ai le message suivant quelle que soit la commande "linky daily", "linky loadcurve" ou "linky maxpower":
✖ Converting circular structure to JSON
J'ai renouvellĂ© (au cas oĂč) les deux tokens "from scratch" depuis https://conso.vercel.app/ mais rien n'y fait. :-(
J'ai également constaté que le site d'Enedis était "down" ce week-end (maintenance, upgrade...?)

L'erreur ci-dessus est beaucoup reprise dans le web (de maniÚre générale) mais difficile pour moi de comprendre le problÚme!

Merci

Failed to Converting circular structure to JSON

Hi,

Thanks for your amazing project.

I have a question:

After a successfull login:

$ linky auth -a xxxxxxxxxxx xxxxxxxxx -r xxxxxxxxxxxxx -u xxxxxxxxxxxxxx
Vos tokens ont été sauvegardés avec succÚs

When I run daily | loadcurve | maxpower commands:

$ linky loadcurve --start 2021-01-01 --end 2021-01-07 --output data/conso-puissance-moyenne-2021-01-01-2021-01-05.json
✖ Converting circular structure to JSON
    --> starting at object with constructor 'TLSSocket'
    |     property '_httpMessage' -> object with constructor 'ClientRequest'
    --- property 'socket' closes the circle

Thanks

Permettre d'afficher les données d'une tranche horaire précise sur un intervalle de jours

Tout d'abord, merci pour cet outil super intéressant.

J'ai une proposition : j'aimerai pouvoir comparer sur une période de plusieurs jours ma conso, par exemple, entre 12h00 et 14h00
La requĂȘte nĂ©cessiterait un jour de dĂ©but, un jour de fin, une heure de dĂ©but, une heure de fin genre :

linky {nom de la fonction} --start 2023-12-01 --end 2023-12-05 --start-time 12:00 --end-date 14:00

La valeur affichée serait la somme des périodes :
12:00 + 12:30 + 13:00 + 13:30

Il faudrait évidemment pouvoir arrondir (et prévenir l'arrondi choisi) si l'heure saisie n'est pas en :00 ou :30

Et l'affichage serait de ce style :

Date Valeur (W) Graphique
2023-12-01 1800 XXXXXXXXXX
2023-12-02 1950 XXXXXXXXXXXX
2023-12-03 1400 XXXXXXX
2023-12-04 1800 XXXXXXXXXX
2023-12-05 2500 XXXXXXXXXXXXXXX

Qu'en pensez-vous ?

Erreur depuis 2jours

Bonjour,
Depuis 2 jours plus de données

Note : tokens récupérés juste avant sur le site.
"
Sat Apr 15 10:27:08 pi@Xpi4Test: ~ $ linky auth -a auth -a xxx-r xxx-u xxx
Vos tokens ont été sauvegardés avec succÚs

Sat Apr 15 10:28:04 pi@Xpi4Test: ~ $ linky loadcurve --start 2023-04-10 --end 2023-04-14
✖ Error from the Enedis API
Code: 500
Response: {
"error": "Internal Server error",
"error_description": "Un problÚme a été rencontré lors du traitement.",
"error_uri": "https://bluecoder.enedis.fr/api-doc/consulter-souscrire"
}
Probléme ENEDIS ou anomalies ?
Merci

Migration API : nouvelle version ?

Bonjour,

Tout d'abord félicitations et un grand merci pour cette application qui fonctionne trÚs bien et qui remplit parfaitement son rÎle.

La date du 30 avril 2023 prévue pour la désactivation des API actuelles arrive à grands pas ...

Est-il toujours prévu une mise à jour de l'application avec les nouvelles API ?

Si oui, quand avez-vous prévu de rendre disponible cette nouvelle version ?

Cordialement,

Patrick

Issue with 2.01

==> Update for token
If have to PRM
Getting token is working if get token one by one.

==>still got warning when loadcurve

Hi,
My config :
Linux TELEINFO 6.1.21-v7+ #1642 SMP Mon Apr 3 17:20:52 BST 2023 armv7l GNU/Linux
node -v v19.8.1

Just update to 2.0.1 : Mise à jour disponible: 1.7.0 → 2.0.1
Was working before...

**Launch
Thu May 11 09:35:58 pi@TELEINFO: ~ $ linky loadcurve --prm xxprm1xx --start 2023-05-02 --end 2023-05-09
(node:6086) ExperimentalWarning: Import assertions are not a stable feature of the JavaScript language. Avoid relying on their current behavior and syntax as those might change in a future version of Node.js.
(Use node --trace-warnings ... to show where the warning was created)
(node:6086) ExperimentalWarning: Importing JSON modules is an experimental feature and might change at any time
Vous n'avez aucun token enregistré.
Lancez 'linky auth' pour vous connecter ou renseignez le paramĂštre --token

** Token get through new URL https://conso.boris.sh/
Got error
{"status":403,"message":"AccÚs au PRM non autorisé","query":"xxprm1xx","verified":"xxprm1xx,xxprm2x","detail":"Prenez un screenshot de cette erreur et envoyez-la moi svp, merci !"}

Merci pour ton aide

dist/bin/cli.js: line 1: import: command not found

Bonjour,
Je voulais mettre à jour mon répo local avec la version 2.0.2 , et je tombe sur ces erreurs :
root:>dist/bin/cli.js --help
dist/bin/cli.js: line 1: import: command not found
dist/bin/cli.js: line 2: import: command not found
dist/bin/cli.js: line 3: import: command not found
dist/bin/cli.js: line 4: import: command not found
dist/bin/cli.js: line 5: import: command not found
dist/bin/cli.js: line 6: import: command not found
dist/bin/cli.js: line 7: import: command not found
dist/bin/cli.js: line 8: import: command not found
dist/bin/cli.js: line 9: syntax error near unexpected token e' dist/bin/cli.js: line 9: function exit(e) {'

Pour info, j'utilisais avant la version 1.7.0 , avec le mĂȘme mode opĂ©ratoire , et cela fonctionnait sans problĂšme, pour Ă©carter tout problĂšme de mise Ă  jour de repo local, pour ce test , j'ai supprimĂ© l'ancien repo, et recloner Ă  nouveau.
Voilà ma procédure :
-git clone https://github.com/bokub/linky.git
-cd linky
-npm install --no-audit (dans ma config juste 2 moderate severity vulnerabilities)
-npm run build
-chmod +x dist/bin/cli.js
#test
dist/bin/cli.js --help (qui donne les erreurs plus haut).

Je ne sais pas , si c'est un problÚme de repo , ou un problÚme dans ma procédure (c'est tellement gros que j'opterai pour le second choix)
mon node -v donne : v16.19.1 (le mĂȘme utilisĂ© pour la version de linky 1.7.0)
Sur une Debian10.

D'avance merci pour ton indulgence et ton aide .

error 500 when try to authenticate

Hello,
When I tried to get an access token, after the authentication state, i was redirect to the callback url with this error:
server_error lincs-internal-server-error
https://conso.vercel.app/api/callback?code=500&error=server_error&error_description=lincs-internal-server-error
Did i miss something?
thank you

Installation

Hello! Pour un projet pĂ©dagogique j'essaie de faire fonctionner le programme avec un compteur Linky existant, je n'arrive pas a dĂ©marrer le projet, je ne vois pas oĂč mettre le JS qui est dans le README, et sous quel format les donnĂ©es sortent-elle ?

Merci d'avance ! 💯

Token irrécupérable (bloqué sur la page de consentement)

Hello,

Tout d'abord merci pour ton travail et ce que tu permets de faire en domotique.

Je ne sais pas si c'est moi ou Enedis ou autre mais le token semble irrécupérable, la page reste sur l'écran de validation, tu cliques, tu attends et rien, néanmoins je reçois bien le mail de partage de mes données av Bokub Linky.
J'ai essayé sous chrome, firefox et meme internet explorer avec le logo en bleu....

En inspectant la page je tombe sur ça comme erreur si ça peut aider à trouver une réponse: Uncaught SyntaxError: unexpected token: numeric literal

[Auto-hébergement] Indépendance totale de la partie serveur

Bonjour,

Je tente d'installer la partie serveur avec l'ensemble des fichiers et dépendances sur mon serveur.

  • Si j'ai pu rĂ©cupĂ©rer les fichiers CSS, JS et les fonts qui sont appelĂ©s, je n'ai malheureusement pas accĂšs Ă  ce qui se passe dans /api/collect de ton serveur perso. Serait-il possible d'avoir cette partie ?
  • Y a-t-il une config particuliĂšre Ă  mettre pour le VHost sous Apache/Nginx ?

Merci !

Utilisation du refresh token

Bonjour, j'aimerai savoir comment faire pour utiliser le refresh token et avoir un nouveau acces token en ligne de commande.
J'utilise linky-win.exe sur notebook et j'aimerais pouvoir faire en sorte de lancé la commande pour avoir les données de consommation toutes les 30min.

Vous n'ĂȘtes pas connectĂ© Ă  votre compte Enedis

bonjour
j'utilise linky depuis pas mal de temps sans pb, mais en passant a la version2, j'ai un souci.
dans sauv_linky.sh je lance les 3 commandes linky, jour, max et heure: avec 2 dates en variable now et now1
linky loadcurve -s $now -e $now1 | tee -a /home/partage/linkymoy.txt
linky maxpower -s $now -e $now1 | tee -a /home/partage/linkymax.txt
linky daily -s $now -e $now1 | tee -a /home/partage/linkyjour.txt

LancĂ© en crontab, j'ai une erreur, la mĂȘme que si je lance le script en sudo:
sudo sh /home/partage/sauv_linky.sh
Vous n'ĂȘtes pas connectĂ© Ă  votre compte Enedis
Lancez 'linky auth' pour vous connecter

sh /home/partage/sauv_linky.sh
fonctionne correctement
je suppose que crontab lance en root car j'ai la meme erreur!!
une idée??
merci d'avance et bonne journée

compte pro

Bonjour, bravo pour le super travail!

Je l'utilise parfaitement avec un compte perso pour le compteur de la maison.
Par contre je viens de crĂ©er un compte pro sur Enedis pour associer le compte de mon local professionnel, et lorsque j'essaye de donner l'accĂšs Ă  l'application pour avec les Tokens, j'atterris sur la page du compte perso, oĂč bien sur il me dit qu'aucun compteur n'est rattachĂ©.
Comment pourrais-je faire?

token non renouvelés automatiquement

Bonjour,

Contrairement à ce qui est écris dans le readme file, les tokens ne semblent pas renouvelés automatiquement sur mon RPI. Du coup je suis obligé de me fournir à chaque fois de nouveaux token sur la page https://conso.vercel.app/

J'ai manqué une étape?

Merci.

Can’t login (have URI changed ?)

Hello,
I’m not able to login, I’m getting « Error: The email or the password is incorrect ».

When looking at the source code, I’m not sure uri defined line 17 is valid anymore.

When trying a GET via CURL, I received a 302 redirect to "messages/inexistant.html".

curl -XGET -I https://espace-client-connexion.enedis.fr/auth/UI/Login
HTTP/1.1 302 Found
Location: /messages/inexistant.html

Does it still work with your credentials ?
What do you think ?

"ADAM-ERR0069"

Bonjour,
lorsque j'essaye de relever ma production PV j'obtient le message d'erreur suivant: (je produit depuis le 2 mai et j'ai injecté 100kWh sur le réseau.

......> linky loadcurveprod
× Conso API a rĂ©pondu avec une erreur
× Code: 400
× RĂ©ponse: {
"status": 400,
"message": "The Enedis API returned an error",
"error": {
"error": "ADAM-ERR0069",
"error_description": "Le sens de la mesure ne correspond pas pour le PRM demandé"
}
}

Merci pour votre aide, Pat.

Executer "linky" dans un crontab

Bonjour,
impossible d'exécuter le programme dans un cron
Erreur :
✖ Error from the Enedis API Code: 500 Response: { "error": "Internal Server error", "error_description": "Un problĂšme a Ă©tĂ© rencontrĂ© lors du traitement.", "error_uri": "https://bluecoder.enedis.fr/api-doc/consulter-souscrire" }
Vraiment pas possible ?

"no measure found for this usage point"

Hello,

Merci pour ce chouette programme :)
Je souhaite avoir ma conso 1/2h par 1/2h, donc j'imagine que c'est linky loadcurve mais ca me répond invariablement

✖ Error from the Enedis API
Code: 404
Response: {
    "error": "no_data_found",
    "error_description": "no measure found for this usage point",
    "error_uri": "https://bluecoder.enedis.fr/api-doc/consulter-souscrire"
}

Y a quelque chose que j'ai loupé ? Oublié d'activer chez Enedis ?

Bloqué par Cloudflare

J'utilise le module.js en v2 depuis 1 semaine avec 3 abonnements. J'ai une crontab toutes les 3h.
Depuis vendredi dernier, le module renvoie une erreur Cloudfare: Sorry, you have been blocked - You are unable to access, etc.
J'ai désactivé pendant 12h la crontab, mais l'erreur persiste.
Comment faire pour ne plus ĂȘtre blacklistĂ© ? Quelles sont les limites Ă  ne pas dĂ©passer ?
PS: je trouve aussi des erreurs Enedis 500 dans mes logs pour vendredi, il y a peut-ĂȘtre eu un effet d'emballement avec un retry toutes les 5min.

erreur 404 apres le login

J'Ă©tais plein d'espoirs :)
mais une fois que je rentre mes identifiants ici :
https://conso.vercel.app/
je tombe sur ce message

ERREUR 404
La page que vous recherchez n’existe pas.

est-ce que c'est lié a mon compte ou bien l'api a changée et cela ne marche plus ?

Erreur durant la conversion du JSON

De facon assez recurante l'erreur suivante se produit

✖ Converting circular structure to JSON
    --> starting at object with constructor 'TLSSocket'
    |     property '_httpMessage' -> object with constructor 'ClientRequest'
    --- property 'socket' closes the circle

"no measure found for this usage point" avec loadcurvprod

Bonjour Bokub,

Je préfÚre ouvrir une nouvelle issue plutÎt que d'alimenter la précédente #45

Depuis le 21 janvier 2023, lorsque nous essayons de récupérer les valeurs via loadcurveprod, nous obtenons le message ci-dessous.
Nous avons bien activé la collecte de la production horaire.
Aucun soucis avec loadcurve, c'est uniquement loadcurveprod qui nous remonte ce message quelque soit le jour choisi depuis le 21/01/23.
Et cela fonctionnait bien avant.

Je ne sais pas si Enedis a changé quelque chose sur la collecte de production uniquement. :(

✖ Error from the Enedis API
Code: 404
Response: {
    "error": "no_data_found",
    "error_description": "no measure found for this usage point",
    "error_uri": "https://bluecoder.enedis.fr/api-doc/consulter-souscrire"
}

Merci pour le programme ;)

Fonction pour vérifier la bonne connexion ? Node Red

Bonjour,

Je suis à la recherche d'une fonction pour savoir si l'on s'est bien identifié ou une indication que la demande daily a été envoyée chez enedis.

Voici le contexte : J'utilise la 1.3.0, en intégration sous Node Red
J'ai testé la ligne de commande qui fonctionne parfaitement

Sous Node Red, dans un function, je ne recois pas de retour de la fonction
Voici mon cadre l'expérimentation :

  • setTimeout me renvoit bien un warn 2 secondes aprĂšs
  • faireQqc me renvoi bien un warn de dĂ©marrage et de choix (validation de la function .THEN)
  • session.getDailyConsumption ne me renvoit rien
  • msg.payload = "return" est bien renvoyĂ©
var linky = require('linky');

// Créez une session
const session = new linky.Session({
    accessToken: 't__MODIFié__v0L1KJYB6TFUCgI9h8pdYPUxXcptul9LD',
    refreshToken: 'BI__MODIFié__9fPQZvOIg4NbdaaU76HvjTOWs7',
    usagePointId: '198__MODIFié__345',
    onTokenRefresh: (accessToken, refreshToken) => {
        // Cette fonction sera appelée si les tokens sont renouvelés
        // Les tokens précédents ne seront plus valides
        // Il faudra utiliser ces nouveaux tokens à la prochaine création de session
        // Si accessToken et refreshToken sont vides, cela signifie que les tokens ne peuvent plus
        // ĂȘtre utilisĂ©s. Il faut alors en rĂ©cupĂ©rer des nouveaux sur conso.vercel.app
    },
});

setTimeout(() => { 
    node.warn("Timeout");
    msg.payload = "timeout";
    node.send(msg);
}, 2000);

function faireQqc() {
  return new Promise((successCallback, failureCallback) => {
    node.warn("C'est fait");
    // réussir une fois sur deux
    if (Math.random() > 0.5) {
      successCallback("RĂ©ussite");
    } else {
      failureCallback("Échec");
    }
  })
}


function successCallback(résultat) {
  node.warn("L'opération a réussi avec le message : " + résultat);
}


function failureCallback(erreur) {
  node.warn("L'opération a échoué avec le message : " + erreur);
}

const promise = faireQqc();
promise.then(successCallback, failureCallback);



session.getDailyConsumption('2021-06-10', '2020-06-11').then((result) => {
    node.warn(result);
    
    msg.payload = result;
    node.send(msg);
    /*
    {
        "unit": "Wh",
        "data": [
            { "date": "2020-09-01", "value": 12278 },
            { "date": "2020-09-02", "value": 15637 },
            ...
    */
});

msg.payload = "return"
return msg;

Token non renouvelé pour second compteur Linky

Hello,

Déjà merci pour le boulot et la clarté des explications.
J'ai deux compteur linky et je compte requĂȘter les donnĂ©es pour les deux.
Je m'enregistre sur le site pour avoir mon token + resfesh et exécute une seule fois le "linky auth" pour les deux compteurs avec le -u XXX.

Seul le token pour le premier compteur est rafraichi (fréquence daily) lorsque je fais un fitbit daily !


1er compteur
✔ RĂ©cupĂ©ration de la consommation quotidienne
✔ Vos tokens ont Ă©tĂ© automatiquement renouvelĂ©s
✔ RĂ©sultats sauvegardĂ©s dans data/ma_conso_P7N_daily.json

2nd compteur
✖ Impossible de rafraichir vos tokens...
Veuillez réessayer plus tard ou relancez 'linky auth' avec de nouveaux tokens


Une idée de ce qu'il peut se passer ?

Normalisation json

Bonjour Boris,

-----Suggestion d'Ă©volution :
Dans ton module linky / index.js, je suggÚre de normaliser les return en remplaçant les parties throw par des retours au format json.

-----Usage :
Utiliser ton module comme une API dont le format retourné serait standard.
Dans un programme appelant (par exemple boucle infinie à intervalle régulier, qui récupÚre la conso de la veille), ça ne permettrait de traiter le retour de maniÚre simple en n'ayant qu'à tester "return.status".

-----EXEMPLES :
getDailyConsumption( 2022-05-19 , 2022-05-20 )
{
status: 0,
message: 'success',
unit: 'Wh',
data: [ { date: '2022-05-19', value: 6357 } ]
}

getDailyConsumption( 2022-05-19 , 2022-05-21 )
{
status: 400,
message: 'Invalid request: The end date parameter must be earlier than the current date.',
unit: 'none',
data: []
}

etc.

-----Exemple de modification :
//throw new Error("Error from the Enedis API\nCode: " + err.response.status + "\nResponse: " + JSON.stringify(err.response.data, null, 4));
return {
status : err.response.status,
message : "Error from the Enedis API: " + JSON.stringify(err.response.data, null, 4),
unit: "none",
data: [],
};

Fonctionnement HS d'Enedis sur Chrome, il faut passer par firefox

Sur Chrome, j'ai des problĂšmes sur le site d'Enedis (erreur serveur).
En tentant de récupérer mes tokens, je tombe sur une page 404.

En lisant sur le net, j'ai vu que le site Enedis ne fonctionnerait pas trop sur Chrome.

J'ai tenté de passer par Firefox -> Le site Enedis fonctionne mieux et tout fonctionne, j'ai mes tokens.

Merci pour le travail !

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.