{"id":14110928,"url":"https://github.com/bokub/linky","last_synced_at":"2025-05-15T19:08:53.091Z","repository":{"id":37768388,"uuid":"155589798","full_name":"bokub/linky","owner":"bokub","description":"🔌 CLI tool to retrieve Linky smart meters data","archived":false,"fork":false,"pushed_at":"2025-01-05T23:18:52.000Z","size":661,"stargazers_count":250,"open_issues_count":4,"forks_count":24,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-04T05:31:58.844Z","etag":null,"topics":["api","consumption","electricity","enedis","linky","nodejs","power","production"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bokub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-31T16:30:36.000Z","updated_at":"2025-04-27T18:26:48.000Z","dependencies_parsed_at":"2022-09-24T04:32:00.087Z","dependency_job_id":"57ee2096-21a3-4beb-bd89-26f7cff1a12e","html_url":"https://github.com/bokub/linky","commit_stats":{"total_commits":89,"total_committers":3,"mean_commits":"29.666666666666668","dds":0.0337078651685393,"last_synced_commit":"404ac04e2aa7660e2260b5b9678bf14990ae7047"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bokub%2Flinky","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bokub%2Flinky/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bokub%2Flinky/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bokub%2Flinky/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bokub","download_url":"https://codeload.github.com/bokub/linky/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254265925,"owners_count":22042010,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","consumption","electricity","enedis","linky","nodejs","power","production"],"created_at":"2024-08-14T10:03:03.584Z","updated_at":"2025-05-15T19:08:53.067Z","avatar_url":"https://github.com/bokub.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Linky\n\n[![Version](https://gradgen.bokub.workers.dev/npm/v/linky?gradient=b65cff,11cbfa\u0026style=flat\u0026label=version)](https://www.npmjs.com/package/linky)\n[![Build Status](https://flat.badgen.net/github/checks/bokub/linky?label=tests)](https://github.com/bokub/linky/actions/workflows/run.yml?query=branch%3Amaster)\n[![Codecov](https://img.shields.io/codecov/c/github/bokub/linky?style=flat-square)](https://codecov.io/gh/bokub/linky)\n[![Downloads](https://flat.badgen.net/npm/dy/linky?color=FF9800)](https://www.npmjs.com/package/linky)\n[![Node version](https://flat.badgen.net/badge/Node.js/\u003e=%2016/blue)](https://github.com/bokub/prettier-config)\n[![Code style](https://flat.badgen.net/badge/code%20style/prettier/ff69b4)](https://github.com/bokub/prettier-config)\n\n\u003e **N.B**: Because this tool is targeted for french people, the documentation is...in french\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/bokub/linky/assets/17952318/15aa5983-6c56-4ef0-b2e2-c663bf7f7087\" alt=\"Linky CLI\"\u003e\n\u003c/p\u003e\n\nCe module vous permet de récupérer votre consommation et production électrique Linky via le service [Conso API](https://conso.boris.sh/)\n\nIl peut s'utiliser de 2 façons :\n\n1. [En ligne de commande](#1-linky-en-ligne-de-commande)\n2. [En tant que module Node.js](#2-linky-comme-module-nodejs), depuis un autre programme\n\nNotez qu'il vous faut un compteur Linky et un espace client Enedis pour pouvoir utiliser ce module\n\n## 1. Linky en ligne de commande\n\n### Installation\n\n1. Installez [Node.js](https://nodejs.org/fr/download) sur votre machine. La version minimale supportée est Node 16.\n   - [Instructions Debian, Ubuntu \u0026 Mint](https://github.com/nodesource/distributions#installation-instructions)\n   - [Installateur Windows](https://nodejs.org/dist/v18.16.0/node-v18.16.0-x86.msi)\n   - [Installateur MacOS](https://nodejs.org/dist/v18.16.0/node-v18.16.0.pkg)\n2. Ouvrez un terminal\n3. Installez `linky` avec `npm`:\n\n```bash\nnpm i -g linky\n```\n\n### Utilisation\n\n#### Authentification\n\nAvant 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\n\nRendez-vous sur [conso.boris.sh](https://conso.boris.sh) pour donner votre accord et récupérer un token\n\nPuis, créez une connexion à votre compte avec la commande suivante :\n\n```bash\nlinky auth --token \u003cvotre-token\u003e\n```\n\n#### Récupération des données\n\nUne 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\n\n```bash\n# Récupère la consommation quotidienne du 1er au 3 mai 2023\nlinky daily --start 2023-05-01 --end 2023-05-04\n\n# Récupère la puissance moyenne consommée le 1 mai 2023, sur un intervalle de 30 min\nlinky loadcurve --start 2023-05-01 --end 2023-05-02\n\n# Récupère la puissance maximale de consommation atteinte quotidiennement du 1er au 3 mai 2023\nlinky maxpower --start 2023-05-01 --end 2023-05-04\n```\n\nSi vous produisez de l'électricité, vous pouvez également récupérer votre production quotidienne et votre courbe de charge (production par demi-heure)\n\n```bash\n# Récupère la production quotidienne du 1er au 3 mai 2023\nlinky dailyprod --start 2023-05-01 --end 2023-05-04\n\n# Récupère la puissance moyenne produite le 1 mai 2023, sur un intervalle de 30 min\nlinky loadcurveprod --start 2023-05-01 --end 2023-05-02\n```\n\n#### Dates par défaut\n\nEn l'absence des paramètres `--start` et `--end`, vous récupérez la consommation / production / puissance de la veille\n\n```bash\n# Récupère la consommation de la journée d'hier\nlinky daily\n\n# Récupère la puissance moyenne consommée pendant la journée d'hier, sur un intervalle de 30 min\nlinky loadcurve\n\n# Récupère la puissance maximale de consommation atteinte durant la journée d'hier\nlinky maxpower\n\n# Récupère la production de la journée d'hier\nlinky dailyprod\n\n# Récupère la production moyenne consommée pendant la journée d'hier, sur un intervalle de 30 min\nlinky loadcurveprod\n```\n\n#### Multi-PRM et multi-token\n\nSi 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`\n\n```bash\n# Récupère la consommation de la veille pour le compteur 111222333\nlinky daily --prm 111222333\n\n# Récupère la production de la veille pour le compteur 777888999\nlinky dailyprod --prm 777888999\n```\n\nSi 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`\n\n```bash\n# Récupère la consommation de la veille avec le token aaa.bbb.ccc\nlinky daily --token aaa.bbb.ccc\n\n# Récupère la production de la veille avec le token xxx.yyy.zzz\nlinky dailyprod --token xxx.yyy.zzz\n```\n\n#### Paramètres supplémentaires\n\nVous pouvez changer le format d'affichage de sortie grâce au paramètre `--format`\n\nLes formats disponibles sont `json`, `csv` et `pretty` (par défaut)\n\n```bash\nlinky daily --start 2023-05-01 --end 2023-05-02 --format json\n```\n\nVous pouvez sauvegarder vos résultats dans un fichier en combinant les paramètres `--output` et `--format`\n\n```bash\n# Sauvegarde la courbe de charge de la veille au format JSON\nlinky loadcurve --output chemin/vers/ma_conso.json --format json\n\n# Sauvegarde une semaine de consommation au format CSV\nlinky daily --start 2023-05-01 --end 2023-05-07 --output chemin/vers/ma_conso.csv --format csv\n```\n\nVous pouvez masquer les messages et animations de progression grâce au paramètre `--quiet` afin de faciliter l'intégration dans des scripts\n\n```bash\nlinky maxpower --quiet --format json | jq '.interval_reading[0].value'\n```\n\nPour voir l'aide détaillée et plus d'exemples :\n\n```bash\nlinky --help\n```\n\n## 2. Linky comme module Node.js\n\n### Installation\n\n```bash\n# Depuis un projet Node.js\nnpm i linky\n```\n\n### Utilisation\n\n```js\nimport { Session } from 'linky';\n\n// Créez une session à partir du token\nconst token = 'xxx.yyy.zzz';\nlet session = new Session(token);\n\n// Si le token permet d'accéder à plusieurs PRMs, vous pouvez préciser celui à utiliser\nconst prm = '123456';\nsession = new Session(token, prm);\n\n// Si vous prévoyez de rendre votre application/service/module accessible au grand public,\n// ajoutez un User-Agent au format string à la session.\n// Celui-ci doit permettre d'identifier l'origine des requêtes envoyées à Conso API.\nsession.userAgent = 'Mon super service';\n\n// Récupère la consommation quotidienne du 1er au 3 mai 2023\nsession.getDailyConsumption('2023-05-01', '2023-05-04').then((result) =\u003e {\n  console.log(result);\n  /*\n    {\n      \"reading_type\": {\n        \"unit\": \"Wh\",\n        \"measurement_kind\": \"energy\"\n      },\n      \"interval_reading\": [\n        { \"value\": \"12873\", \"date\": \"2023-05-01\" },\n        { \"value\": \"12296\", \"date\": \"2023-05-02\" },\n        { \"value\": \"14679\", \"date\": \"2023-05-03\" }\n      ]\n    ...\n    */\n});\n\n// Récupère la puissance moyenne consommée le 1er mai 2023, sur un intervalle de 30 min\nsession.getLoadCurve('2023-05-01', '2023-05-02').then((result) =\u003e {\n  console.log(result);\n  /*\n    {\n      \"reading_type\": {\n        \"unit\": \"W\",\n        \"measurement_kind\": \"power\"\n      },\n      \"interval_reading\": [\n        { \"value\": \"752\", \"date\": \"2023-05-01 00:30:00\" },\n        { \"value\": \"346\", \"date\": \"2023-05-01 01:00:00\" },\n        { \"value\": \"250\", \"date\": \"2023-05-01 01:30:00\" },\n        ...\n    */\n});\n\n// Récupère la puissance maximale de consommation atteinte quotidiennement du 1er au 3 mai 2023\nsession.getMaxPower('2023-05-01', '2023-05-04').then((result) =\u003e {\n  console.log(result);\n  /*\n    {\n      \"reading_type\": {\n        \"unit\": \"VA\",\n        \"measurement_kind\": \"power\"\n      },\n      \"interval_reading\": [\n        { \"value\": \"4638\", \"date\": \"2023-05-01 12:06:20\" },\n        { \"value\": \"4410\", \"date\": \"2023-05-02 19:27:46\" },\n        { \"value\": \"3570\", \"date\": \"2023-05-03 21:42:12\" }\n      ]\n    ...\n    */\n});\n\n// Récupère la production quotidienne du 1er au 3 mai 2023\nsession.getDailyProduction('2023-05-01', '2023-05-04').then((result) =\u003e {\n  console.log(result);\n  /*\n    {\n      \"reading_type\": {\n        \"unit\": \"Wh\",\n        \"measurement_kind\": \"energy\"\n      },\n      \"interval_reading\": [\n        { \"value\": \"12873\", \"date\": \"2023-05-01\" },\n        { \"value\": \"12296\", \"date\": \"2023-05-02\" },\n        { \"value\": \"14679\", \"date\": \"2023-05-03\" }\n      ]\n    ...\n    */\n});\n\n// Récupère la puissance moyenne produite le 1er mai 2023, sur un intervalle de 30 min\nsession.getProductionLoadCurve('2023-05-01', '2023-05-02').then((result) =\u003e {\n  console.log(result);\n  /*\n    {\n      \"reading_type\": {\n        \"unit\": \"W\",\n        \"measurement_kind\": \"power\"\n      },\n      \"interval_reading\": [\n        { \"value\": \"752\", \"date\": \"2023-05-01 00:30:00\" },\n        { \"value\": \"346\", \"date\": \"2023-05-01 01:00:00\" },\n        { \"value\": \"250\", \"date\": \"2023-05-01 01:30:00\" },\n        ...\n    */\n});\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbokub%2Flinky","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbokub%2Flinky","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbokub%2Flinky/lists"}