diff --git a/docs/courriers/20260905-garantie-pylontech.md b/docs/courriers/20260905-garantie-pylontech.md index 102c493..cf6837b 100644 --- a/docs/courriers/20260905-garantie-pylontech.md +++ b/docs/courriers/20260905-garantie-pylontech.md @@ -88,10 +88,16 @@ communiquerai le résultat : il dira si ces cellules sont récupérables ou non. `soh`, et à partir de quelle valeur Pylontech considère qu'une cellule doit être traitée ? -Je tiens à votre disposition l'ensemble des relevés bruts : exports BatteryView, -sorties console verbatim des huit modules, et historiques complets tension par -cellule. Un rapport détaillé est également disponible en français, en anglais -et en chinois, si cela facilite l'échange avec le constructeur. +Vous trouverez en pièce jointe l'ensemble du dossier +(`archive-pylontech-20260905.tar.gz`, 4,8 Mo) : un dossier par module nommé par +son code-barres, contenant les exports BatteryView d'origine, les sorties +console verbatim, l'historique complet tension par cellule et le journal +d'événements. Le rapport d'analyse s'y trouve également en **français, anglais +et chinois**, au format HTML — il s'ouvre dans un navigateur sans connexion, ce +qui devrait faciliter la transmission au constructeur. + +Le fichier `LISEZ-MOI.md` à la racine de l'archive, également trilingue, indique +quel module est quel et par où commencer la lecture. Restant à votre disposition pour toute mesure complémentaire que Pylontech souhaiterait, diff --git a/docs/mesures/archive-pylontech-20260905.tar.gz b/docs/mesures/archive-pylontech-20260905.tar.gz index a1b1e2e..9dbff58 100644 Binary files a/docs/mesures/archive-pylontech-20260905.tar.gz and b/docs/mesures/archive-pylontech-20260905.tar.gz differ diff --git a/docs/mesures/archive-pylontech-20260905/2023-Y230202C30371426/202609052031-suivi.csv b/docs/mesures/archive-pylontech-20260905/2023-Y230202C30371426/202609052031-suivi.csv new file mode 100644 index 0000000..16c213b --- /dev/null +++ b/docs/mesures/archive-pylontech-20260905/2023-Y230202C30371426/202609052031-suivi.csv @@ -0,0 +1,5 @@ +heure_reelle,etat,courant_mA,c1_mV,c2_mV,c3_mV,c4_mV,c5_mV,c6_mV,c7_mV,c8_mV,c9_mV,c10_mV,c11_mV,c12_mV,c13_mV,c14_mV,c15_mV,ecart_mV +2026-09-05T18:31:45.233Z,Y230202C30371426,,3290,3291,3292,3292,3292,3290,3291,3292,3292,3291,3290,3291,3292,3292,3292,2 +2026-09-05T18:31:45.388Z,Y230202C30371425,,3291,3292,3291,3292,3290,3290,3292,3292,3292,3290,3290,3292,3292,3292,3290,2 +2026-09-05T18:31:45.633Z,Y230202C30371431,,3290,3292,3292,3292,3291,3289,3292,3292,3292,3291,3290,3292,3292,3292,3291,3 +2026-09-05T18:31:45.788Z,Y230202C30371427,,3289,3291,3291,3291,3291,3289,3291,3291,3291,3291,3289,3291,3292,3292,3291,3 diff --git a/docs/mesures/archive-pylontech-20260905/2023-Y230202C30371426/202609052040-suivi.csv b/docs/mesures/archive-pylontech-20260905/2023-Y230202C30371426/202609052040-suivi.csv new file mode 100644 index 0000000..a8d3e17 --- /dev/null +++ b/docs/mesures/archive-pylontech-20260905/2023-Y230202C30371426/202609052040-suivi.csv @@ -0,0 +1,5 @@ +heure_reelle,etat,courant_mA,c1_mV,c2_mV,c3_mV,c4_mV,c5_mV,c6_mV,c7_mV,c8_mV,c9_mV,c10_mV,c11_mV,c12_mV,c13_mV,c14_mV,c15_mV,ecart_mV +2026-09-05T18:40:18.873Z,Y230202C30371426,,3304,3304,3304,3304,3303,3303,3304,3303,3304,3303,3304,3303,3304,3304,3303,1 +2026-09-05T18:40:19.033Z,Y230202C30371425,,3303,3303,3303,3304,3304,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,1 +2026-09-05T18:40:19.191Z,Y230202C30371431,,3303,3303,3304,3303,3303,3303,3303,3303,3303,3303,3303,3304,3303,3304,3303,1 +2026-09-05T18:40:19.348Z,Y230202C30371427,,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,3303,0 diff --git a/docs/mesures/archive-pylontech-20260905/LISEZ-MOI.md b/docs/mesures/archive-pylontech-20260905/LISEZ-MOI.md index cf2651e..d44d675 100644 --- a/docs/mesures/archive-pylontech-20260905/LISEZ-MOI.md +++ b/docs/mesures/archive-pylontech-20260905/LISEZ-MOI.md @@ -73,5 +73,7 @@ BatteryView `*.txt` exports carry the raw module clock. - `*-evenements-distant-*.csv` — journal d'événements, à la seconde, déclenchements uniquement - `*-console.txt` — sorties `info`, `stat`, `soh`, `pwr` verbatim - `*_history_*.txt`, `*_event_*.txt` — exports BatteryView d'origine (UTF-16) +- `rapport/` — le rapport d'analyse en français, anglais et chinois (HTML, + s'ouvre dans n'importe quel navigateur, sans connexion) - `commun/` — sessions console couvrant plusieurs modules a la fois, relevés simultanés des trois modules du pack 2022, et captures d'écran BatteryView diff --git a/docs/mesures/archive-pylontech-20260905/rapport/rapport-FR.html b/docs/mesures/archive-pylontech-20260905/rapport/rapport-FR.html new file mode 100644 index 0000000..50db1d9 --- /dev/null +++ b/docs/mesures/archive-pylontech-20260905/rapport/rapport-FR.html @@ -0,0 +1,184 @@ +Les cent cinq cellules + + + + + +
+
+
Parc Pylontech · diagnostic en cours
+

Les cent cinq cellules

+

Huit modules, quinze cellules chacun. Dix de ces cellules brident la charge des quatre-vingt-quinze autres. Voici lesquelles, comment on le sait, et ce qu’on peut en faire.

+
Dernière mise à jour : 5 septembre 2026, 17 h
+
+ +
10
cellules atteintes sur 105
3
modules concernés sur 8
5 s
entre le franchissement du seuil et la coupure
30 A
plafond imposé au parc entier, pour 150 A nominaux
+ +

1Le verdict

Le parc n’est pas usé. Quatre modules sur huit sont irréprochables : +soixante cellules sans une seule anomalie, après plus de trois cents cycles. Un +cinquième l’est tout autant.

+

Trois modules portent l’ensemble du problème, et à l’intérieur de ces trois, +dix cellules. Quand l’une d’elles atteint 3550 mV, le BMS réduit +le courant de charge — non pas de son module, mais de tout le parc. +Cinq modules sains sont bridés par dix cellules.

+ +
+
200 mV400 mV600 mV0323pack ancien · adresse 2 — LE TÉMOIN1191218831884189519061977187819091891019211191121881318714192151980322pack ancien · adresse 11182217831784178517765487371818191791017911182126911317814273151780319pack ancien · adresse 31183252131844186518263187183818691841047311184124431318414188154240324isolée (BAT3) · adresse 4113821243138413751396132713481429143101351113612137131281413515683
+
sainedécaléegravement atteinteterminale
+
Amplitude balayée par chaque cellule entre sa tension minimale et sa +tension maximale sur la période d’observation. Le premier module est le +témoin : il vit dans la même chaîne que les deux abîmés, a subi +les mêmes courants et les mêmes journées, et ses quinze cellules tiennent dans +onze millivolts d’amplitude les unes des autres. Une cellule qui +a perdu de la capacité se remplit et se vide avant ses voisines, donc elle balaye +une plage bien plus large à courant identique — le signe ne demande aucun +démontage. Les amplitudes du module isolé sont plus faibles parce qu’il a passé +la période hors service, sur une plage de charge plus étroite : c’est l’écart à +ses propres voisines qui compte, pas la valeur absolue.
+
+ +

2Le parc, module par module

L’identité d’un module est son code-barres, jamais son adresse : chaque +chaîne renumérote ses modules à partir de 1, il existe donc deux « module 1 » +dans cette installation.

+
Code-barresPackAdr.Cellules atteintesLesquellesÉcart médianSurtensionsSous-tensions
K220803C30160322ancien146 · 7 · 12 · 1410849886en service
K220803C30160323ancien20—600en service
K220803C30160319ancien352 · 6 · 10 · 12 · 1545416179en service
K220803C30160324ancien4115572959isolée
Y230202C30371426récent10—211en service
Y230202C30371425récent20—211en service
Y230202C30371431récent30—211en service
Y230202C30371427récent40—210en service
+

Lisez la colonne des écarts médians. Les cinq modules sains tiennent entre +2 et 6 millivolts ; les trois autres sont à 45, 57 et 108. Le même +contraste apparaît sur les surtensions : 498 pour le premier +module contre une seule pour chacun des quatre du pack récent, +qui ont pourtant encaissé dix fois plus de cycles.

+

Les soixante cellules du pack récent balayent toutes entre 168 et 191 mV +d’amplitude, sans exception. L’inventaire est clos.

+ +

3Le déclenchement, chronométré

Le 5 septembre, la console a été branchée sur les trois modules du pack +ancien pendant que l’alarme montait. Ce qui suit est le relevé, à la seconde.

+
HeureCe qui se passe
13:04:48cellule 7 du module …0322 à 3526 mV, cellule 6 du module …0319 à 3541sous le seuil
13:05:08les mêmes à 3555 et 3575 mVniveau 3 franchi
13:05:13le BMS abaisse le courant de charge autorisé de 50 à 30 Acinq secondes plus tard
13:15:10les cellules redescendent à 3499 et 3522 mV, l’alarme repasse au vertle plafond, lui, reste à 30 A
13:22:40plafond 30 → 40 Aaprès 7 min 31 s
13:26:39plafond 40 → 35 A, meneuses à 3563 et 3548 mVil redéclenche
13:38:10plafond 35 → 40 Aaprès 11 min 31 s
+
+

La découverte la plus utile tient dans la quatrième +ligne : l’alarme repasse au vert bien avant que le plafond ne remonte. Chercher +l’alarme dans les journaux fait donc manquer l’essentiel du phénomène — elle dure +quelques minutes, le bridage dure des heures.

+

Les seuils ne sont pas des valeurs choisies : ce sont ceux que le matériel +déclare lui-même, lus dans sysinfo du LV-HUB.

+ +

4Résistance interne ou décalage de charge ?

La question décide de ce qu’un rééquilibrage peut rendre. Deux points de +mesure suffisent à la trancher, sur la même cellule à deux courants différents.

+ + +
courant par celluleécart
13:04:486,33 A163 mV
14:05:420,04 A46 mV
+

La pente donne ≈ 18,6 mΩ de résistance excédentaire sur la +cellule meneuse, vingt à quarante fois celle d’une cellule saine. L’ordonnée à +l’origine, ≈ 46 mV, est le vrai décalage de charge.

+

Contrôle indépendant : cette droite prédit 312 mV à 100 A de courant parc. +L’écart maximal réellement enregistré sur trente-sept jours est de 280 mV.

+

Donc sur les ~190 mV d’écart en charge, 46 mV seulement sont un +décalage — le reste est de la capacité perdue. Un rééquilibrage parfait +ramènerait le déclenchement de 3555 à environ 3510 mV : sous le seuil, mais avec +quarante millivolts de marge seulement.

+ +

5D’où viennent les dégâts

Pas de l’usure. Le pack récent a encaissé trois cent quarante cycles en un +an et ses soixante cellules sont intactes : cycler n’abîme pas ces modules. Et le +module témoin a partagé la chaîne, les courants et les journées des deux abîmés +sans une égratignure.

+

Les deux cellules terminales du parc sont descendues à 2953 +et 2939 mV, sous le seuil d’alarme basse. Un accumulateur +au lithium-fer-phosphate mené là sous charge perd de la capacité de façon +irréversible. Ces cellules n’ont pas vieilli, elles ont été vidées trop +bas.

+ +

6Les trois questions posées à Pylontech

+
  1. Ces cellules sont-elles récupérables par un maintien prolongé en haut de charge, ou la composante résistive de 18,6 mΩ rend-elle l’opération vaine ?
  2. Existe-t-il une procédure recommandée pour un module dans cet état, et une limite au-delà de laquelle le remplacement du module s’impose ?
  3. Que compte exactement le SOHCount par cellule rendu par la commande soh, et à partir de quelle valeur Pylontech considère qu’une cellule doit être traitée ?
+
+ + +
diff --git a/docs/mesures/archive-pylontech-20260905/rapport/report-EN.html b/docs/mesures/archive-pylontech-20260905/rapport/report-EN.html new file mode 100644 index 0000000..dc96952 --- /dev/null +++ b/docs/mesures/archive-pylontech-20260905/rapport/report-EN.html @@ -0,0 +1,181 @@ +The Hundred and Five Cells + + + + + +
+
+
Pylontech pack · diagnosis in progress
+

The Hundred and Five Cells

+

Eight modules, fifteen cells each. Ten of those cells throttle the charging of the other ninety-five. Here is which ones, how we know, and what can be done about it.

+
Last updated : 5 September 2026, 17:00
+
+ +
10
affected cells out of 105
3
modules involved out of 8
5 s
from threshold crossing to current cut
30 A
limit imposed on the whole pack, against 150 A nominal
+ +

1The verdict

The pack is not worn out. Four modules out of eight are flawless: +sixty cells without a single anomaly, after more than three hundred cycles. A +fifth is just as clean.

+

Three modules carry the entire problem, and within those three, ten +cells. When one of them reaches 3550 mV the BMS reduces the charge +current — not for its own module, but for the whole pack. Five +healthy modules are throttled by ten cells.

+ +
+
200 mV400 mV600 mV0323older pack · address 2 — THE CONTROL1191218831884189519061977187819091891019211191121881318714192151980322older pack · address 11182217831784178517765487371818191791017911182126911317814273151780319older pack · address 31183252131844186518263187183818691841047311184124431318414188154240324isolated (BAT3) · address 4113821243138413751396132713481429143101351113612137131281413515683
+
healthydriftingbadly affectedterminal
+
Voltage span swept by each cell between its minimum and maximum over the +observation period. The first module is the control: it lives on +the same chain as the two damaged ones, has seen the same currents and the same +days, and its fifteen cells sit within eleven millivolts of span of each +other. A cell that has lost capacity fills and empties before its +neighbours, so it sweeps a far wider range at identical current — the sign +requires no disassembly. The isolated module shows smaller spans because it spent +the period out of service, over a narrower state-of-charge window: what matters +is the gap to its own neighbours, not the absolute value.
+
+ +

2The pack, module by module

A module's identity is its barcode, never its address: each chain renumbers +its modules from 1, so there are two “module 1” in this installation.

+
BarcodePackAddr.Affected cellsWhich onesMedian spreadOvervoltageUndervoltage
K220803C30160322older146 · 7 · 12 · 1410849886in service
K220803C30160323older20—600in service
K220803C30160319older352 · 6 · 10 · 12 · 1545416179in service
K220803C30160324older4115572959isolated
Y230202C30371426newer10—211in service
Y230202C30371425newer20—211in service
Y230202C30371431newer30—211in service
Y230202C30371427newer40—210in service
+

Read the median spread column. The five healthy modules sit between +2 and 6 millivolts; the other three are at 45, 57 and 108. The +same contrast shows in the overvoltage counters: 498 for the +first module against one for each of the four in the newer pack, +which have nonetheless taken ten times more cycles.

+

All sixty cells of the newer pack sweep between 168 and 191 mV, without +exception. The inventory is closed.

+ +

3The trip, timed

On 5 September the console was connected to the three modules of the older +pack while the alarm was rising. What follows is the record, to the second.

+
TimeWhat happens
13:04:48cell 7 of module …0322 at 3526 mV, cell 6 of module …0319 at 3541below threshold
13:05:08the same two at 3555 and 3575 mVlevel 3 crossed
13:05:13the BMS drops the allowed charge current from 50 to 30 Afive seconds later
13:15:10cells fall back to 3499 and 3522 mV, alarm clearsthe limit stays at 30 A
13:22:40limit 30 → 40 Aafter 7 min 31 s
13:26:39limit 40 → 35 A, leading cells at 3563 and 3548 mVit trips again
13:38:10limit 35 → 40 Aafter 11 min 31 s
+
+

The most useful finding is in the fourth row: the alarm +clears well before the limit recovers. Looking for the alarm in the logs therefore +misses the bulk of the phenomenon — the alarm lasts minutes, the throttling lasts +hours.

+

The thresholds are not values we chose: they are the ones the hardware +declares, read from sysinfo on the LV-HUB.

+ +

4Internal resistance, or charge imbalance?

The answer decides what balancing can give back. Two measurement points on +the same cell at two different currents settle it.

+ + +
current per cellspread
13:04:486.33 A163 mV
14:05:420.04 A46 mV
+

The slope gives ≈ 18.6 mΩ of excess internal resistance on the +leading cell, twenty to forty times that of a healthy one. The intercept, +≈ 46 mV, is the true charge imbalance.

+

Independent check: this line predicts 312 mV at 100 A pack current. The largest +spread actually recorded over thirty-seven days is 280 mV.

+

So of the ~190 mV of spread under charge, only 46 mV are an +imbalance — the rest is lost capacity. A perfect rebalance would bring the +trip from 3555 down to about 3510 mV: below the threshold, but with only forty +millivolts of margin.

+ +

5Where the damage comes from

Not from wear. The newer pack has taken three hundred and forty cycles in a +year and its sixty cells are intact: cycling does not damage these modules. And +the control module shared the chain, the currents and the days of the two damaged +ones without a scratch.

+

The two terminal cells went down to 2953 and +2939 mV, below the low-voltage alarm threshold. A +lithium iron phosphate cell taken there under load loses capacity irreversibly. +These cells did not age, they were discharged too deep.

+ +

6Three questions for Pylontech

+
  1. Are these cells recoverable by a prolonged hold at high state of charge, or does the 18.6 mΩ resistive component make the attempt pointless?
  2. Is there a recommended procedure for a module in this condition, and a limit beyond which module replacement is the only option?
  3. What exactly does the per-cell SOHCount returned by the soh command count, and from what value does Pylontech consider a cell to require attention?
+
+ + +
diff --git a/docs/mesures/archive-pylontech-20260905/rapport/report-ZH.html b/docs/mesures/archive-pylontech-20260905/rapport/report-ZH.html new file mode 100644 index 0000000..70553f3 --- /dev/null +++ b/docs/mesures/archive-pylontech-20260905/rapport/report-ZH.html @@ -0,0 +1,171 @@ +一百零五颗电芯 + + + + + +
+
+
Pylontech 电池组 · 诊断进行中
+

一百零五颗电芯

+

八个模块,每个十五颗电芯。其中十颗电芯限制了其余九十五颗的充电。本报告说明是哪几颗、依据何在、以及可以怎么处理。

+
最后更新 : 2026 年 9 月 5 日 17:00
+
+ +
10
105 颗中受影响的电芯
3
8 个模块中受影响的模块
5 秒
从越过阈值到电流下降
30 A
施加于整组的限值,标称为 150 A
+ +

1结论

电池组并未整体老化。八个模块中有四个毫无异常: +六十颗电芯在三百多次循环之后没有一处异常。第五个模块同样干净。

+

全部问题集中在三个模块,而在这三个模块之内只有十颗电芯。 +当其中一颗达到 3550 mV,BMS 便降低充电电流——降的不是该模块,而是 +整个电池组。五个健康模块被十颗电芯拖住。

+ +
+
200 mV400 mV600 mV0323旧电池组 · 地址 2 — 对照模块1191218831884189519061977187819091891019211191121881318714192151980322旧电池组 · 地址 11182217831784178517765487371818191791017911182126911317814273151780319旧电池组 · 地址 31183252131844186518263187183818691841047311184124431318414188154240324已隔离 (BAT3) · 地址 4113821243138413751396132713481429143101351113612137131281413515683
+
健康轻度偏离严重偏离已失效
+
图中为观测期内每颗电芯在最低与最高电压之间所扫过的电压幅度。 +第一个模块是对照模块:它与两个受损模块同在一条通信链上, +经历相同的电流与相同的日子,而它的十五颗电芯彼此幅度之差仅 +十一毫伏。容量衰减的电芯会比相邻电芯更早充满、更早放空, +因此在相同电流下扫过的电压范围明显更宽——这一判据无需拆解模块即可读出。 +已隔离模块的幅度偏小,是因为它在观测期内处于停用状态、荷电区间更窄: +应看它与自身相邻电芯之差,而非绝对数值。
+
+ +

2逐模块清单

模块的身份是它的条码,而不是地址:每条链上的模块都从 1 重新编号, +因此本系统中存在两个「模块 1」。

+
条码电池组地址受影响电芯数具体编号压差中位数过压次数欠压次数
K220803C30160322旧146 · 7 · 12 · 1410849886在运行
K220803C30160323旧20—600在运行
K220803C30160319旧352 · 6 · 10 · 12 · 1545416179在运行
K220803C30160324旧4115572959已隔离
Y230202C30371426新10—211在运行
Y230202C30371425新20—211在运行
Y230202C30371431新30—211在运行
Y230202C30371427新40—210在运行
+

请看压差中位数一列。五个健康模块在 2 至 6 毫伏之间; +另外三个分别为 45、57 与 108。过压计数呈现同样的对比:第一个模块为 +498 次,而新电池组四个模块各自仅 1 次—— +后者的循环次数还多出十倍。

+

新电池组的六十颗电芯,幅度全部落在 168 至 191 mV 之间,无一例外。 +清点至此完成。

+ +

3触发过程,逐秒记录

9 月 5 日,在告警上升过程中,控制台接入了旧电池组的三个模块。 +以下为逐秒记录。

+
时间发生了什么
13:04:48模块 …0322 的 7 号电芯 3526 mV,模块 …0319 的 6 号电芯 3541低于阈值
13:05:08同两颗电芯升至 3555 与 3575 mV越过三级阈值
13:05:13BMS 将允许充电电流由 50 A 降至 30 A五秒之后
13:15:10电芯回落至 3499 与 3522 mV,告警解除但电流限值仍保持 30 A
13:22:40限值 30 → 40 A经过 7 分 31 秒
13:26:39限值 40 → 35 A,最高电芯 3563 与 3548 mV再次触发
13:38:10限值 35 → 40 A经过 11 分 31 秒
+
+

最有价值的一处发现在第四行:告警远早于电流限值 +恢复之前就已解除。因此仅在日志中查找告警,会错过该现象的绝大部分—— +告警持续数分钟,而限流持续数小时。

+

这些阈值并非我们所选:它们由设备本身声明,读取自 LV-HUB 的 +sysinfo。

+ +

4是内阻,还是荷电不均衡?

这个问题决定了均衡能够挽回多少。同一颗电芯在两种电流下的两个测点 +即可判定。

+ + +
单芯电流压差
13:04:486.33 A163 mV
14:05:420.04 A46 mV
+

斜率给出最高电芯的额外内阻约 18.6 mΩ,为健康电芯的 +二十至四十倍。截距 约 46 mV,才是真正的荷电不均衡。

+

独立验证:该直线预测在整组电流 100 A 时压差为 312 mV;三十七天记录中 +实际出现的最大压差为 280 mV。

+

因此在充电时约 190 mV 的压差中,只有 46 mV 属于不均衡, +其余为容量损失。即便完成理想均衡,触发点也只能从 3555 mV 降至约 3510 mV: +低于阈值,但余量仅四十毫伏。

+ +

5损伤的来源

并非老化所致。新电池组一年内完成三百四十次循环,六十颗电芯完好无损: +循环本身不会损坏这些模块。对照模块与两个受损模块同链、同电流、同工况, +亦毫发无伤。

+

两颗已失效电芯曾降至 2953 与 +2939 mV,低于低压告警阈值。磷酸铁锂电芯在带载状态下 +被放至该电压,会发生不可逆的容量损失。这些电芯不是老化,而是被过放。

+ +

6向 Pylontech 提出的三个问题

+
  1. 这些电芯能否通过长时间保持高荷电状态而恢复,还是 18.6 mΩ 的内阻分量已使该尝试失去意义?
  2. 对处于此状态的模块,是否有推荐的处理流程?超过何种程度必须更换模块?
  3. soh 命令返回的单芯 SOHCount 具体统计的是什么?从多大数值起,Pylontech 认为该电芯需要处理?
+
+ + +
diff --git a/tools/preparer-archive-pylontech.mjs b/tools/preparer-archive-pylontech.mjs index 6d1429c..03947f4 100644 --- a/tools/preparer-archive-pylontech.mjs +++ b/tools/preparer-archive-pylontech.mjs @@ -129,10 +129,27 @@ BatteryView \`*.txt\` exports carry the raw module clock. - \`*-evenements-distant-*.csv\` — journal d'événements, à la seconde, déclenchements uniquement - \`*-console.txt\` — sorties \`info\`, \`stat\`, \`soh\`, \`pwr\` verbatim - \`*_history_*.txt\`, \`*_event_*.txt\` — exports BatteryView d'origine (UTF-16) +- \`rapport/\` — le rapport d'analyse en français, anglais et chinois (HTML, + s'ouvre dans n'importe quel navigateur, sans connexion) - \`commun/\` — sessions console couvrant plusieurs modules a la fois, relevés simultanés des trois modules du pack 2022, et captures d'écran BatteryView `); +// Les rapports rejoignent l'archive : un distributeur qui transmet au +// constructeur ne doit dependre d'aucun lien exterieur, et le destinataire +// final lit peut-etre le chinois plutot que le francais. +const RAPPORTS = [ + ['docs/pages/rapport-batteries.html', 'rapport-FR.html'], + ['docs/pages/battery-report.html', 'report-EN.html'], + ['docs/pages/battery-report-zh.html', 'report-ZH.html'], +]; +const dossierRapports = path.join(OUT, 'rapport'); +fs.mkdirSync(dossierRapports, { recursive: true }); +for (const [src, nom] of RAPPORTS) { + if (fs.existsSync(src)) fs.copyFileSync(src, path.join(dossierRapports, nom)); + else console.log(` ⚠️ rapport absent : ${src}`); +} + console.log(`Archive : ${OUT}`); for (const bc of ordre) { const n = (classe[bc] || []).length;