From 045e93cffd8207a24889a8789fd7825c6394deff Mon Sep 17 00:00:00 2001 From: Cedric Abonnel Date: Tue, 12 May 2026 01:40:22 +0200 Subject: [PATCH] search: index plat search_index.json, reconstruit sur chaque write --- .../files/cover.jpg | Bin 0 -> 42838 bytes .../meta.json | 39 +++++++++++- .../revisions/0002.md | 47 +++++++++++++++ .../revisions/0003.md | 47 +++++++++++++++ .../revisions/0004.md | 47 +++++++++++++++ .../revisions/0005.md | 47 +++++++++++++++ public/index.php | 8 ++- src/ArticleManager.php | 57 ++++++++++++++++++ src/SearchEngine.php | 3 +- 9 files changed, 290 insertions(+), 5 deletions(-) create mode 100644 data/70b5f213-db76-4072-afb6-f876fe67aaf8/files/cover.jpg create mode 100644 data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0002.md create mode 100644 data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0003.md create mode 100644 data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0004.md create mode 100644 data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0005.md diff --git a/data/70b5f213-db76-4072-afb6-f876fe67aaf8/files/cover.jpg b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/files/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67f6b820e6c5257c833b8f55a799f247fc93256f GIT binary patch literal 42838 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

ap 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 z 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 literal 0 HcmV?d00001 diff --git a/data/70b5f213-db76-4072-afb6-f876fe67aaf8/meta.json b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/meta.json index 38b68e8..5c730b9 100644 --- a/data/70b5f213-db76-4072-afb6-f876fe67aaf8/meta.json +++ b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/meta.json @@ -6,17 +6,50 @@ "published": true, "published_at": "2025-12-06 06:36", "created_at": "2025-12-06 06:36:25", - "updated_at": "2026-05-12 01:27:37", + "updated_at": "2026-05-12 01:32:46", "revisions": [ { "n": 1, "date": "2026-05-12 01:27:37", "comment": "", "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" + }, + { + "n": 2, + "date": "2026-05-12 01:29:28", + "comment": "", + "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" + }, + { + "n": 3, + "date": "2026-05-12 01:30:49", + "comment": "", + "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" + }, + { + "n": 4, + "date": "2026-05-12 01:32:08", + "comment": "", + "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" + }, + { + "n": 5, + "date": "2026-05-12 01:32:46", + "comment": "", + "title": "Non, le compteur Linky n'est pas conçu pour repérer votre voiture électrique" } ], - "cover": "", - "files_meta": [], + "cover": "cover.jpg", + "files_meta": { + "cover.jpg": { + "author": "", + "source_url": "https://www.letribunaldunet.fr/wp-content/uploads/2025/09/Maison-moderne-avec-panneaux-solaire-et-voiture-electrique-762x508.jpg" + }, + "18917a438b4d07f9-71431.jpg": { + "author": "", + "source_url": "" + } + }, "external_links": [], "seo_title": "", "seo_description": "", diff --git a/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0002.md b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0002.md new file mode 100644 index 0000000..d48f1c1 --- /dev/null +++ b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0002.md @@ -0,0 +1,47 @@ +*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* + +Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. + +Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". + +## Ce que Linky mesure réellement + +Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. + +Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. + +C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. + +## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état + +Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. + +Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. + +## D'où vient cette idée alors ? + +La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. + +**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. + +Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. + +**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. + +## Et techniquement, ce serait possible un jour ? + +C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. + +Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. + +En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. + +Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. + +## Ce qu'il faut retenir + +Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. + +L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. + +Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0003.md b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0003.md new file mode 100644 index 0000000..d48f1c1 --- /dev/null +++ b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0003.md @@ -0,0 +1,47 @@ +*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* + +Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. + +Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". + +## Ce que Linky mesure réellement + +Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. + +Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. + +C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. + +## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état + +Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. + +Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. + +## D'où vient cette idée alors ? + +La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. + +**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. + +Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. + +**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. + +## Et techniquement, ce serait possible un jour ? + +C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. + +Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. + +En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. + +Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. + +## Ce qu'il faut retenir + +Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. + +L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. + +Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0004.md b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0004.md new file mode 100644 index 0000000..d48f1c1 --- /dev/null +++ b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0004.md @@ -0,0 +1,47 @@ +*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* + +Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. + +Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". + +## Ce que Linky mesure réellement + +Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. + +Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. + +C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. + +## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état + +Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. + +Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. + +## D'où vient cette idée alors ? + +La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. + +**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. + +Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. + +**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. + +## Et techniquement, ce serait possible un jour ? + +C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. + +Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. + +En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. + +Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. + +## Ce qu'il faut retenir + +Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. + +L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. + +Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0005.md b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0005.md new file mode 100644 index 0000000..d48f1c1 --- /dev/null +++ b/data/70b5f213-db76-4072-afb6-f876fe67aaf8/revisions/0005.md @@ -0,0 +1,47 @@ +*Démêlons le vrai du faux sur une affirmation qui revient régulièrement dans les débats autour de la fiscalité des véhicules à batterie.* + +Depuis plusieurs mois, à mesure que s'intensifient les discussions sur une éventuelle taxe kilométrique visant les voitures électriques, une affirmation refait surface avec insistance sur les réseaux sociaux et dans certains articles : *« Le compteur Linky a été conçu pour reconnaître la connexion d'une voiture à batterie. »* La formule est efficace, presque inquiétante, et elle nourrit l'idée d'un État qui aurait anticipé depuis longtemps la surveillance des automobilistes électriques via leur compteur domestique. + +Le problème, c'est que cette affirmation est tout simplement fausse. Ou plus exactement : elle confond grossièrement ce que Linky mesure réellement et ce qu'on lui prête comme capacités. Pour comprendre pourquoi, il faut revenir aux fondamentaux de ce qu'est un compteur électrique, même "intelligent". + +## Ce que Linky mesure réellement + +Un compteur Linky, c'est avant tout un instrument de mesure. Il enregistre la consommation électrique globale du logement, en temps quasi réel, avec une précision bien supérieure à celle des anciens compteurs électromécaniques. Concrètement, il relève la puissance instantanée appelée par l'ensemble de l'installation, l'intensité du courant qui circule sur les phases, ainsi que quelques paramètres plus techniques comme les harmoniques — des perturbations du signal qui renseignent sur la qualité du courant. + +Tout cela est agrégé. Linky voit *un total*, pas une ventilation appareil par appareil. Quand votre four à 3 kW se met en route, le compteur enregistre une montée de 3 kW. Quand une wallbox commence à charger une voiture à 3,7 kW, il enregistre une montée de 3,7 kW. Du point de vue de Linky, ces deux événements sont parfaitement indiscernables. Il n'a aucun moyen de savoir si l'électricité part vers une plaque de cuisson, un chauffe-eau, un radiateur ou une Tesla branchée au garage. + +C'est une limitation fondamentale, pas un oubli de conception : un compteur de tableau électrique se situe en amont de tout, sur l'arrivée générale. Il voit ce qui entre dans la maison, point final. + +## Ce que Linky ne sait pas faire — et ne saura jamais faire en l'état + +Contrairement à ce que certains articles laissent entendre, Linky n'a aucune capacité à identifier la nature des appareils qui se branchent. Il ne reconnaît pas une voiture électrique, ne lit pas les protocoles de communication entre une borne et un véhicule (Type 2, CCS, CHAdeMO), ne dialogue ni avec le chargeur embarqué ni avec le BMS — le système de gestion de batterie qui pilote la charge côté voiture. Aucune de ces fonctions ne figure dans ses spécifications techniques, qui sont publiques et consultables. + +Linky n'est ni une prise connectée capable de profiler ce qui s'y branche, ni un analyseur de charge avancé, ni un dispositif de reconnaissance d'appareils par signature. C'est un compteur de facturation, conçu pour relever votre consommation à distance et permettre à votre fournisseur d'affiner les offres tarifaires (heures creuses dynamiques, par exemple). Tout le reste relève du fantasme ou de la confusion. + +## D'où vient cette idée alors ? + +La rumeur n'est pas née de nulle part. Elle s'enracine dans deux éléments réels, mais largement mal interprétés. + +**Le premier, c'est l'existence de la TIC, la « télé-information client ».** Il s'agit d'une interface physique présente sur le compteur Linky, qui diffuse en continu certaines données : puissance souscrite, puissance instantanée appelée, index de consommation, période tarifaire en cours. Cette interface est *sortante* : elle envoie des informations vers l'extérieur, vers des appareils domestiques compatibles, mais elle ne reçoit rien en retour. + +Certaines wallbox modernes sont capables de se brancher sur cette TIC pour lire en direct la puissance déjà consommée dans le logement. Elles ajustent alors automatiquement la puissance de charge de la voiture pour ne pas faire disjoncter l'installation : si quelqu'un allume le four pendant que la voiture charge, la borne réduit son appel de courant. C'est une fonction très utile, mais elle fonctionne dans un seul sens. **La wallbox lit Linky. Linky ne lit pas la wallbox, et encore moins la voiture.** Beaucoup de gens, en entendant parler de wallbox "communiquant avec Linky", imaginent un dialogue bidirectionnel qui n'existe pas. + +**Le second élément, c'est l'arrivée du débat sur une taxe kilométrique.** Avec la baisse des recettes de TICPE liée à l'électrification du parc automobile, plusieurs think tanks et rapports parlementaires ont effectivement évoqué l'idée de taxer les kilomètres parcourus en VE, et certains ont mentionné Linky parmi les outils techniques *envisageables*. De cette spéculation prospective, une partie du public a tiré la conclusion que le compteur était déjà équipé pour le faire. Or il y a un gouffre entre « on pourrait peut-être un jour utiliser Linky comme brique d'un dispositif fiscal » et « Linky a été conçu pour ça ». Le premier est une hypothèse politique discutable ; le second est un raccourci qui ne correspond à aucune réalité technique. + +## Et techniquement, ce serait possible un jour ? + +C'est la question intéressante, et la réponse mérite plus de nuance qu'un simple oui ou non. + +Il existe effectivement un champ de recherche actif, baptisé **NILM** pour *Non-Intrusive Load Monitoring*. L'idée : analyser la courbe de consommation globale d'un logement pour en déduire, par traitement du signal et apprentissage automatique, quels appareils s'y trouvent et quand ils fonctionnent. Chaque appareil aurait, en théorie, une "signature électrique" reconnaissable — un profil d'appel de courant au démarrage, un comportement en régime, etc. + +En pratique, l'exercice est très difficile, et il l'est particulièrement pour la recharge d'un véhicule électrique. Une borne en charge se comporte comme une charge quasi constante de plusieurs kilowatts pendant plusieurs heures. C'est une signature… qui ressemble énormément à celle d'un chauffe-eau, d'un convecteur, d'un sèche-linge en cycle long ou d'un radiateur à inertie. Sans cadence de fonctionnement caractéristique, sans pics distinctifs, sans cycles courts, il n'y a rien de très spécifique à exploiter. Identifier de manière fiable qu'on a affaire à une voiture *et pas* à un autre appareil de puissance similaire reste un problème ouvert dans la littérature scientifique. + +Mais surtout, et c'est le point essentiel : **Linky n'embarque aucun de ces algorithmes**. Il transmet des données de comptage agrégées à Enedis, qui les utilise pour la facturation et la gestion du réseau. Enedis n'a ni la mission, ni le droit légal, ni l'infrastructure pour analyser appareil par appareil les usages domestiques de ses clients. Le cadre réglementaire français, notamment via la CNIL, encadre strictement ce qui peut être fait des données de consommation, et toute exploitation plus fine — même la courbe de charge à pas fin — nécessite le consentement explicite de l'abonné. + +## Ce qu'il faut retenir + +Le compteur Linky mesure votre consommation globale, c'est vrai. Il permet à certaines bornes de recharge de moduler intelligemment leur puissance via la TIC, c'est vrai aussi. Mais il ne reconnaît pas, n'identifie pas et ne distingue pas une voiture électrique des autres appareils du logement. Cette capacité n'existe ni dans son matériel, ni dans son logiciel, ni dans les données qu'il transmet à Enedis. + +L'affirmation selon laquelle « Linky a été conçu pour reconnaître la connexion d'une voiture à batterie » mélange donc trois choses très différentes : des capacités réelles mais limitées (mesure de puissance, interface TIC sortante), des usages techniques existants côté wallbox, et des hypothèses politiques sur de futurs dispositifs fiscaux. De cette confusion naît une rumeur frappante, mais infondée. + +Le débat sur la fiscalité des véhicules électriques est légitime et important. Il mérite mieux que des affirmations qui n'ont pas de base technique. \ No newline at end of file diff --git a/public/index.php b/public/index.php index 7a1ac65..3821b18 100644 --- a/public/index.php +++ b/public/index.php @@ -1508,7 +1508,13 @@ switch ($action) { $searchResults = []; if ($searchQuery !== '') { $privateCats = $articles->getPrivateCategories(); - $searchPool = array_values(array_filter($articles->getAll(true), static function (array $a) use ($privateCats): bool { + // Utilise l'index pré-construit si disponible (lecture d'un seul fichier JSON) + // Sinon fallback sur getAll() qui scanne tous les répertoires + $rawPool = $articles->getSearchIndex() ?? $articles->getAll(true); + $searchPool = array_values(array_filter($rawPool, static function (array $a) use ($privateCats): bool { + if (!($a['published'] ?? false)) { + return false; + } $cat = trim($a['category'] ?? ''); if ($cat !== '' && in_array($cat, $privateCats, true) && !isLoggedIn()) { return false; diff --git a/src/ArticleManager.php b/src/ArticleManager.php index 68b2aeb..4e5fbf2 100644 --- a/src/ArticleManager.php +++ b/src/ArticleManager.php @@ -116,6 +116,7 @@ class ArticleManager ]; $this->writeMeta($dir, $meta); file_put_contents($dir . '/index.md', ltrim($content)); + $this->rebuildSearchIndex(); return $uuid; } @@ -174,6 +175,7 @@ class ArticleManager $dir = $this->dataDir . '/' . $uuid; $this->writeMeta($dir, $meta); file_put_contents($dir . '/index.md', ltrim($content)); + $this->rebuildSearchIndex(); } public function autosave(string $uuid, string $title, string $content, string $slug): bool @@ -543,6 +545,61 @@ class ArticleManager if (is_dir($dir)) { $this->removeDir($dir); } + $this->rebuildSearchIndex(); + } + + // ------------------------------------------------------------------ // + // Index de recherche (fichier plat) + // ------------------------------------------------------------------ // + + /** + * Reconstruit search_index.json à partir de tous les articles. + * Appelé automatiquement après chaque create/update/delete. + */ + public function rebuildSearchIndex(): void + { + $index = []; + foreach ($this->getAll() as $article) { + $index[] = [ + 'uuid' => $article['uuid'], + 'slug' => $article['slug'] ?? '', + 'title' => $article['title'] ?? '', + 'category' => $article['category'] ?? '', + 'published' => $article['published'], + 'published_at' => $article['published_at'] ?? '', + 'updated_at' => $article['updated_at'] ?? '', + 'plain' => $this->stripForIndex($article['content'] ?? ''), + ]; + } + file_put_contents( + $this->dataDir . '/search_index.json', + json_encode($index, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) + ); + } + + /** Retourne l'index pré-construit, ou null s'il n'existe pas encore. */ + public function getSearchIndex(): ?array + { + $path = $this->dataDir . '/search_index.json'; + if (!file_exists($path)) { + return null; + } + $data = json_decode((string) file_get_contents($path), true); + return is_array($data) ? $data : null; + } + + /** Retire la syntaxe Markdown pour stocker du texte brut dans l'index. */ + private function stripForIndex(string $md): string + { + $t = preg_replace('/!\[[^\]]*\]\([^)]+\)/', '', $md) ?? $md; + $t = preg_replace('/\[([^\]]+)\]\([^)]+\)/', '$1', $t) ?? $t; + $t = preg_replace('/```[\s\S]*?```/', '', $t) ?? $t; + $t = preg_replace('/`[^`]+`/', '', $t) ?? $t; + $t = preg_replace('/^#{1,6}\s*/m', '', $t) ?? $t; + $t = preg_replace('/[*_~]{1,3}([^*_~]+)[*_~]{1,3}/', '$1', $t) ?? $t; + $t = preg_replace('/^\s*[-*+|>]\s*/m', '', $t) ?? $t; + $t = preg_replace('/\n{2,}/', ' ', $t) ?? $t; + return trim($t); } // ------------------------------------------------------------------ // diff --git a/src/SearchEngine.php b/src/SearchEngine.php index 122534b..782cd8c 100644 --- a/src/SearchEngine.php +++ b/src/SearchEngine.php @@ -37,7 +37,8 @@ class SearchEngine $results = []; foreach ($articles as $article) { - $plain = $this->stripMarkdown($article['content'] ?? ''); + // 'plain' est pré-calculé dans search_index.json, sinon on stripe à la volée + $plain = $article['plain'] ?? $this->stripMarkdown($article['content'] ?? ''); $tWords = $this->tokenize($article['title'] ?? ''); $cWords = $this->tokenize($article['category'] ?? ''); $pWords = $this->tokenize($plain);