@jjlmoya/utils-hardware 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +60 -0
- package/src/category/i18n/en.ts +107 -0
- package/src/category/i18n/es.ts +107 -0
- package/src/category/i18n/fr.ts +107 -0
- package/src/category/index.ts +18 -0
- package/src/category/seo.astro +15 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +11 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +26 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +146 -0
- package/src/pages/[locale].astro +251 -0
- package/src/pages/index.astro +4 -0
- package/src/tests/faq_count.test.ts +19 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/seo_length.test.ts +23 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tests/tool_validation.test.ts +17 -0
- package/src/tool/batteryHealthEstimator/bibliography.astro +14 -0
- package/src/tool/batteryHealthEstimator/component.astro +606 -0
- package/src/tool/batteryHealthEstimator/i18n/en.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/es.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/fr.ts +158 -0
- package/src/tool/batteryHealthEstimator/index.ts +34 -0
- package/src/tool/batteryHealthEstimator/seo.astro +14 -0
- package/src/tool/batteryHealthEstimator/ui.ts +31 -0
- package/src/tool/deadPixelTest/bibliography.astro +31 -0
- package/src/tool/deadPixelTest/component.astro +717 -0
- package/src/tool/deadPixelTest/i18n/en.ts +218 -0
- package/src/tool/deadPixelTest/i18n/es.ts +218 -0
- package/src/tool/deadPixelTest/i18n/fr.ts +218 -0
- package/src/tool/deadPixelTest/index.ts +34 -0
- package/src/tool/deadPixelTest/seo.astro +14 -0
- package/src/tool/deadPixelTest/ui.ts +20 -0
- package/src/tool/gamepadTest/bibliography.astro +30 -0
- package/src/tool/gamepadTest/component.astro +1419 -0
- package/src/tool/gamepadTest/i18n/en.ts +186 -0
- package/src/tool/gamepadTest/i18n/es.ts +186 -0
- package/src/tool/gamepadTest/i18n/fr.ts +186 -0
- package/src/tool/gamepadTest/index.ts +34 -0
- package/src/tool/gamepadTest/seo.astro +14 -0
- package/src/tool/gamepadTest/ui.ts +57 -0
- package/src/tool/gamepadVibrationTester/bibliography.astro +14 -0
- package/src/tool/gamepadVibrationTester/component.astro +694 -0
- package/src/tool/gamepadVibrationTester/i18n/en.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/es.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/fr.ts +150 -0
- package/src/tool/gamepadVibrationTester/index.ts +34 -0
- package/src/tool/gamepadVibrationTester/seo.astro +14 -0
- package/src/tool/gamepadVibrationTester/ui.ts +28 -0
- package/src/tool/keyboardTest/bibliography.astro +30 -0
- package/src/tool/keyboardTest/component.astro +601 -0
- package/src/tool/keyboardTest/i18n/en.ts +146 -0
- package/src/tool/keyboardTest/i18n/es.ts +146 -0
- package/src/tool/keyboardTest/i18n/fr.ts +146 -0
- package/src/tool/keyboardTest/index.ts +34 -0
- package/src/tool/keyboardTest/seo.astro +14 -0
- package/src/tool/keyboardTest/ui.ts +8 -0
- package/src/tool/mousePollingTest/bibliography.astro +14 -0
- package/src/tool/mousePollingTest/component.astro +237 -0
- package/src/tool/mousePollingTest/i18n/en.ts +135 -0
- package/src/tool/mousePollingTest/i18n/es.ts +135 -0
- package/src/tool/mousePollingTest/i18n/fr.ts +135 -0
- package/src/tool/mousePollingTest/index.ts +34 -0
- package/src/tool/mousePollingTest/logic/MovingAverage.ts +20 -0
- package/src/tool/mousePollingTest/logic/RatonManager.ts +97 -0
- package/src/tool/mousePollingTest/logic/StatisticalFilter.ts +48 -0
- package/src/tool/mousePollingTest/seo.astro +14 -0
- package/src/tool/mousePollingTest/ui.ts +8 -0
- package/src/tool/mousePollingTest/worker/mouseWorker.ts +50 -0
- package/src/tool/toneGenerator/bibliography.astro +14 -0
- package/src/tool/toneGenerator/component.astro +571 -0
- package/src/tool/toneGenerator/i18n/en.ts +146 -0
- package/src/tool/toneGenerator/i18n/es.ts +146 -0
- package/src/tool/toneGenerator/i18n/fr.ts +146 -0
- package/src/tool/toneGenerator/index.ts +34 -0
- package/src/tool/toneGenerator/seo.astro +14 -0
- package/src/tool/toneGenerator/ui.ts +19 -0
- package/src/tools.ts +10 -0
- package/src/types.ts +72 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { EstimadorSaludBateriaUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'lithium-battery-health-calculator';
|
|
6
|
+
const title = 'Lithium Battery Health Calculator';
|
|
7
|
+
const description =
|
|
8
|
+
'Calculate the State of Health (SoH) of your lithium battery based on cycles, voltage and temperature. Scientific guide to maximize energy longevity.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'What is battery chemical degradation?',
|
|
13
|
+
answer:
|
|
14
|
+
'With each charge and discharge cycle, lithium cells suffer micro-fractures and chemical sediment accumulation (S.E.I.) that reduce their energy storage capacity. It is an inevitable process but one that can be slowed with good habits.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Why is it recommended to charge up to 80%?',
|
|
18
|
+
answer:
|
|
19
|
+
'Lithium batteries suffer more stress at extreme voltages (0% and 100%). Keeping the charge between 20% and 80% can triple the cell life by reducing heat and internal pressure.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'How does heat affect battery life?',
|
|
23
|
+
answer:
|
|
24
|
+
'Heat is the number one enemy. For every 10 degrees increase above the optimal ambient temperature (25 degrees), the rate of chemical degradation roughly doubles.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'What is a full charge cycle?',
|
|
28
|
+
answer:
|
|
29
|
+
'A cycle is the use of 100% of the battery capacity, but it does not have to be all at once. If you use 50% today, charge it, and use 50% tomorrow, you have completed 1 full cycle.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Identify the original capacity',
|
|
36
|
+
text: 'Look on the box of your device or the manufacturer\'s website for the mAh your battery had when new.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Check current cycles',
|
|
40
|
+
text: 'Many systems (like iOS or Android 14) allow you to see how many charge cycles your battery has accumulated.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Enter technical data',
|
|
44
|
+
text: 'Adjust the current voltage, cycles and temperature so our calculation engine can estimate the SoH.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Analyze the diagnosis',
|
|
48
|
+
text: 'Check the health percentage. If you are below 80%, you may start noticing performance drops or unexpected shutdowns.',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowTo> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'en',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<EstimadorSaludBateriaUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Frequently Asked Questions',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'References',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'Journal of Power Sources',
|
|
96
|
+
url: 'https://www.sciencedirect.com/journal/journal-of-power-sources',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'IEEE Xplore — Lithium-Ion Battery Life Prediction',
|
|
100
|
+
url: 'https://ieeexplore.ieee.org/abstract/document/11090151',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{ type: 'title', text: 'The chemistry of time: why lithium batteries die', level: 2 },
|
|
107
|
+
{
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
html: 'A lithium-ion battery is not a static energy box but a dynamic chemical ecosystem in constant degradation since the moment of manufacture. Every charge and discharge cycle, every temperature variation, and every minute at extreme voltages contributes to by-products that hinder ion flow.',
|
|
110
|
+
},
|
|
111
|
+
{ type: 'title', text: 'Main degradation mechanisms', level: 3 },
|
|
112
|
+
{
|
|
113
|
+
type: 'paragraph',
|
|
114
|
+
html: '<strong>SEI layer:</strong> the solid electrolyte interface grows over time, consuming active lithium and increasing internal resistance. <strong>Electrolyte oxidation:</strong> voltages above 4.1V accelerate oxidation and can swell the battery. <strong>Lithium Plating:</strong> charging at low temperatures deposits lithium in metallic form, creating dendrites that can pierce the separator.',
|
|
115
|
+
},
|
|
116
|
+
{ type: 'title', text: 'The 100% myth: why charging overnight is a mistake', level: 3 },
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: 'For a lithium ion, being at 100% charge (4.2V) is a high-stress state. Research shows cycle life doubles or triples when keeping the device between <strong>20% and 80%</strong>. Also, for every 10°C above 25°C, the rate of chemical degradation roughly doubles.',
|
|
120
|
+
},
|
|
121
|
+
{ type: 'title', text: 'Energy survival protocol', level: 3 },
|
|
122
|
+
{
|
|
123
|
+
type: 'paragraph',
|
|
124
|
+
html: 'Never charge a battery below 0°C: lithium deposits on the anode causing permanent damage. Fast charging generates localized heat and mechanical stress; use it only when strictly necessary. For long-term storage, keep the battery at 50% in a cool place.',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
ui: {
|
|
128
|
+
badge: 'Li-Ion Battery',
|
|
129
|
+
title: 'Battery Health Estimator',
|
|
130
|
+
description: 'Technical degradation diagnosis for Lithium-Ion cells.',
|
|
131
|
+
paramsTitle: 'Cell Parameters',
|
|
132
|
+
voltageLabel: 'Current Voltage',
|
|
133
|
+
cyclesLabel: 'Charge Cycles',
|
|
134
|
+
tempLabel: 'Temperature',
|
|
135
|
+
voltageHint: 'Nominal range: 3.0V (empty) to 4.2V (full).',
|
|
136
|
+
labelUsefulLife: 'Useful Life',
|
|
137
|
+
yearsPrefix: 'Est.',
|
|
138
|
+
yearsSuffix: 'years',
|
|
139
|
+
metricThermalStress: 'Thermal Stress',
|
|
140
|
+
metricVoltageStress: 'Voltage Stress',
|
|
141
|
+
metricLithiumPlating: 'Lithium Plating',
|
|
142
|
+
statusExcelente: 'Excellent Status',
|
|
143
|
+
statusBueno: 'Good Status',
|
|
144
|
+
statusRegular: 'Fair Status',
|
|
145
|
+
statusCritico: 'Critical Status',
|
|
146
|
+
indicatorTempNormal: 'Normal',
|
|
147
|
+
indicatorTempCritical: 'Critical',
|
|
148
|
+
indicatorVoltageHigh: 'High',
|
|
149
|
+
indicatorVoltageLow: 'Low',
|
|
150
|
+
indicatorPlatingRisk: 'High Risk',
|
|
151
|
+
indicatorPlatingOk: 'No Risk',
|
|
152
|
+
recTemp: 'Reduce ambient temperature or improve ventilation to avoid electrolyte oxidation.',
|
|
153
|
+
recVoltageHigh: 'Avoid keeping the battery at 100% charge (4.2V) for extended periods.',
|
|
154
|
+
recVoltageLow: 'Avoid deep discharges; cycles between 20% and 80% double battery life.',
|
|
155
|
+
recSohLow: 'Capacity has dropped below the optimal standard. Consider a replacement if autonomy is insufficient.',
|
|
156
|
+
recDefault: 'Keep your current habits — your battery is in an ideal operating range.',
|
|
157
|
+
},
|
|
158
|
+
};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { EstimadorSaludBateriaUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'estimador-salud-bateria';
|
|
6
|
+
const title = 'Calculadora de Salud de Batería de Litio';
|
|
7
|
+
const description =
|
|
8
|
+
'Calcula el estado de salud (SoH) de tu batería de litio basándote en ciclos, voltaje y temperatura. Guía científica para maximizar la longevidad energética.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '¿Qué es la degradación química de las baterías?',
|
|
13
|
+
answer:
|
|
14
|
+
'Con cada ciclo de carga y descarga, las celdas de litio sufren microrroturas y acumulación de sedimentos químicos (S.E.I.) que reducen su capacidad de almacenar energía. Es un proceso inevitable pero que se puede ralentizar con buenos hábitos.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: '¿Por qué se recomienda cargar hasta el 80%?',
|
|
18
|
+
answer:
|
|
19
|
+
'Las baterías de litio sufren más estrés en sus voltajes extremos (0% y 100%). Mantener la carga entre el 20% y el 80% puede triplicar la vida útil de la celda al reducir el calor y la presión interna.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '¿Cómo afecta el calor a la vida de la batería?',
|
|
23
|
+
answer:
|
|
24
|
+
'El calor es el enemigo número uno. Por cada 10 grados de aumento sobre la temperatura ambiente óptima (25 grados), la velocidad de degradación química se duplica aproximadamente.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: '¿Qué es un ciclo de carga completo?',
|
|
28
|
+
answer:
|
|
29
|
+
'Un ciclo es el uso del 100% de la capacidad de la batería, pero no tiene por qué ser de una vez. Si usas el 50% hoy, la cargas, y usas el 50% mañana, habrás completado 1 ciclo total.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Identificar la capacidad original',
|
|
36
|
+
text: 'Busca en la caja de tu dispositivo o en la web del fabricante los mAh que tenía tu batería cuando era nueva.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Consultar ciclos actuales',
|
|
40
|
+
text: 'Muchos sistemas (como iOS o Android 14) permiten ver cuántos ciclos de carga lleva acumulados la batería.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Introducir datos técnicos',
|
|
44
|
+
text: 'Ajusta el voltaje actual, los ciclos y la temperatura para que nuestro motor de cálculo estime el SoH.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Analizar el diagnóstico',
|
|
48
|
+
text: 'Consulta el porcentaje de salud. Si estás por debajo del 80%, es posible que empieces a notar caídas de rendimiento o apagones inesperados.',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowTo> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'es',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<EstimadorSaludBateriaUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Preguntas Frecuentes',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Referencias',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'Journal of Power Sources',
|
|
96
|
+
url: 'https://www.sciencedirect.com/journal/journal-of-power-sources',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'IEEE Xplore — Lithium-Ion Battery Life Prediction',
|
|
100
|
+
url: 'https://ieeexplore.ieee.org/abstract/document/11090151',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{ type: 'title', text: 'La química del tiempo: por qué mueren las baterías de litio', level: 2 },
|
|
107
|
+
{
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
html: 'Una batería de iones de litio no es una caja estática de energía, sino un ecosistema químico dinámico en constante degradación desde el momento de su fabricación. Cada ciclo de carga y descarga, cada variación de temperatura y cada minuto en voltajes extremos contribuye a la formación de subproductos que dificultan el flujo de iones.',
|
|
110
|
+
},
|
|
111
|
+
{ type: 'title', text: 'Mecanismos de degradación principales', level: 3 },
|
|
112
|
+
{
|
|
113
|
+
type: 'paragraph',
|
|
114
|
+
html: '<strong>Capa SEI:</strong> la interfaz de electrolito sólido crece con el tiempo, consume litio activo y aumenta la resistencia interna. <strong>Oxidación del electrolito:</strong> voltajes superiores a 4.1V aceleran la oxidación y pueden hinchar la batería. <strong>Lithium Plating:</strong> cargar a baja temperatura deposita litio en forma metálica, creando dendritas que pueden perforar el separador.',
|
|
115
|
+
},
|
|
116
|
+
{ type: 'title', text: 'El mito del 100%: por qué cargar toda la noche es un error', level: 3 },
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: 'Para un ion de litio, estar al 100% de carga (4.2V) es un estado de alta tensión. Las investigaciones muestran que los ciclos de vida se duplican o triplican si se mantiene el dispositivo entre el <strong>20% y el 80%</strong>. Además, por cada 10°C por encima de los 25°C, la velocidad de degradación química se duplica aproximadamente.',
|
|
120
|
+
},
|
|
121
|
+
{ type: 'title', text: 'Protocolo de supervivencia energética', level: 3 },
|
|
122
|
+
{
|
|
123
|
+
type: 'paragraph',
|
|
124
|
+
html: 'Nunca cargues una batería por debajo de 0°C: el litio se deposita en el ánodo causando daños permanentes. La carga rápida genera calor localizado y estrés mecánico; úsala solo cuando sea estrictamente necesario. Para almacenamiento prolongado, guarda la batería al 50% y en frío.',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
ui: {
|
|
128
|
+
badge: 'Batería Li-Ion',
|
|
129
|
+
title: 'Estimador de Salud de Batería',
|
|
130
|
+
description: 'Diagnóstico técnico de degradación para celdas de Iones de Litio.',
|
|
131
|
+
paramsTitle: 'Parámetros de Celda',
|
|
132
|
+
voltageLabel: 'Voltaje Actual',
|
|
133
|
+
cyclesLabel: 'Ciclos de Carga',
|
|
134
|
+
tempLabel: 'Temperatura',
|
|
135
|
+
voltageHint: 'Rango nominal: 3.0V (vacío) a 4.2V (lleno).',
|
|
136
|
+
labelUsefulLife: 'Vida Útil',
|
|
137
|
+
yearsPrefix: 'Est.',
|
|
138
|
+
yearsSuffix: 'años',
|
|
139
|
+
metricThermalStress: 'Estrés Térmico',
|
|
140
|
+
metricVoltageStress: 'Estrés de Voltaje',
|
|
141
|
+
metricLithiumPlating: 'Plating de Litio',
|
|
142
|
+
statusExcelente: 'Estado Excelente',
|
|
143
|
+
statusBueno: 'Estado Bueno',
|
|
144
|
+
statusRegular: 'Estado Regular',
|
|
145
|
+
statusCritico: 'Estado Crítico',
|
|
146
|
+
indicatorTempNormal: 'Normal',
|
|
147
|
+
indicatorTempCritical: 'Crítico',
|
|
148
|
+
indicatorVoltageHigh: 'Alto',
|
|
149
|
+
indicatorVoltageLow: 'Bajo',
|
|
150
|
+
indicatorPlatingRisk: 'Alto Riesgo',
|
|
151
|
+
indicatorPlatingOk: 'Sin Riesgo',
|
|
152
|
+
recTemp: 'Reduce la temperatura o mejora la ventilación para evitar la oxidación del electrolito.',
|
|
153
|
+
recVoltageHigh: 'Evita mantener la batería al 100% de carga (4.2V) por periodos prolongados.',
|
|
154
|
+
recVoltageLow: 'Evita descargas profundas; los ciclos entre 20% y 80% duplican la vida útil.',
|
|
155
|
+
recSohLow: 'La capacidad ha caído por debajo del estándar óptimo. Considera un reemplazo si la autonomía es insuficiente.',
|
|
156
|
+
recDefault: 'Mantén los hábitos actuales, tu batería está en un rango de operación ideal.',
|
|
157
|
+
},
|
|
158
|
+
};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { EstimadorSaludBateriaUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculateur-sante-batterie-lithium';
|
|
6
|
+
const title = 'Calculateur de Santé de Batterie Lithium';
|
|
7
|
+
const description =
|
|
8
|
+
"Calculez l'état de santé (SoH) de votre batterie lithium en fonction des cycles, de la tension et de la température. Guide scientifique pour maximiser la longévité énergétique.";
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: "Qu'est-ce que la dégradation chimique des batteries ?",
|
|
13
|
+
answer:
|
|
14
|
+
"À chaque cycle de charge et décharge, les cellules lithium subissent des microfractures et une accumulation de sédiments chimiques (S.E.I.) qui réduisent leur capacité de stockage. C'est un processus inévitable mais qui peut être ralenti avec de bonnes habitudes.",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: "Pourquoi recommande-t-on de charger jusqu'à 80% ?",
|
|
18
|
+
answer:
|
|
19
|
+
"Les batteries lithium subissent plus de stress aux tensions extrêmes (0% et 100%). Maintenir la charge entre 20% et 80% peut tripler la durée de vie en réduisant la chaleur et la pression interne.",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: "Comment la chaleur affecte-t-elle la durée de vie de la batterie ?",
|
|
23
|
+
answer:
|
|
24
|
+
"La chaleur est l'ennemi numéro un. Pour chaque augmentation de 10 degrés au-dessus de la température ambiante optimale (25 degrés), la vitesse de dégradation chimique double approximativement.",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: "Qu'est-ce qu'un cycle de charge complet ?",
|
|
28
|
+
answer:
|
|
29
|
+
"Un cycle correspond à l'utilisation de 100% de la capacité de la batterie, mais pas nécessairement en une seule fois. Si vous utilisez 50% aujourd'hui, rechargez, puis utilisez 50% demain, vous avez complété 1 cycle total.",
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Identifier la capacité originale',
|
|
36
|
+
text: "Cherchez sur la boîte de votre appareil ou sur le site du fabricant les mAh que votre batterie avait à l'état neuf.",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Consulter les cycles actuels',
|
|
40
|
+
text: "De nombreux systèmes (comme iOS ou Android 14) permettent de voir combien de cycles de charge votre batterie a accumulés.",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Saisir les données techniques',
|
|
44
|
+
text: "Ajustez la tension actuelle, les cycles et la température pour que notre moteur de calcul estime le SoH.",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: "Analyser le diagnostic",
|
|
48
|
+
text: "Consultez le pourcentage de santé. En dessous de 80%, vous pourriez commencer à remarquer des baisses de performances ou des extinctions inattendues.",
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowTo> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'fr',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<EstimadorSaludBateriaUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Questions Fréquentes',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Références',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'Journal of Power Sources',
|
|
96
|
+
url: 'https://www.sciencedirect.com/journal/journal-of-power-sources',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'IEEE Xplore — Lithium-Ion Battery Life Prediction',
|
|
100
|
+
url: 'https://ieeexplore.ieee.org/abstract/document/11090151',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{ type: 'title', text: 'La chimie du temps : pourquoi les batteries lithium meurent', level: 2 },
|
|
107
|
+
{
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
html: "Une batterie lithium-ion n'est pas une boîte d'énergie statique, mais un écosystème chimique dynamique en dégradation constante depuis sa fabrication. Chaque cycle de charge et décharge, chaque variation de température et chaque minute à des tensions extrêmes contribue à la formation de sous-produits qui entravent le flux d'ions.",
|
|
110
|
+
},
|
|
111
|
+
{ type: 'title', text: 'Mécanismes de dégradation principaux', level: 3 },
|
|
112
|
+
{
|
|
113
|
+
type: 'paragraph',
|
|
114
|
+
html: "<strong>Couche SEI :</strong> l'interface électrolyte solide croît avec le temps, consomme du lithium actif et augmente la résistance interne. <strong>Oxydation de l'électrolyte :</strong> des tensions supérieures à 4,1V accélèrent l'oxydation et peuvent gonfler la batterie. <strong>Lithium Plating :</strong> charger à basse température dépose du lithium sous forme métallique, créant des dendrites qui peuvent percer le séparateur.",
|
|
115
|
+
},
|
|
116
|
+
{ type: 'title', text: "Le mythe des 100% : pourquoi charger toute la nuit est une erreur", level: 3 },
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: "Pour un ion lithium, être à 100% de charge (4,2V) est un état de haute tension. Les recherches montrent que la durée de vie double ou triple si l'on maintient l'appareil entre <strong>20% et 80%</strong>. De plus, pour chaque hausse de 10°C au-dessus de 25°C, la vitesse de dégradation chimique double approximativement.",
|
|
120
|
+
},
|
|
121
|
+
{ type: 'title', text: 'Protocole de survie énergétique', level: 3 },
|
|
122
|
+
{
|
|
123
|
+
type: 'paragraph',
|
|
124
|
+
html: "Ne chargez jamais une batterie en dessous de 0°C : le lithium se dépose sur l'anode, causant des dommages permanents. La charge rapide génère de la chaleur localisée et du stress mécanique ; utilisez-la uniquement en cas de stricte nécessité. Pour un stockage prolongé, conservez la batterie à 50% dans un endroit frais.",
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
ui: {
|
|
128
|
+
badge: 'Batterie Li-Ion',
|
|
129
|
+
title: 'Estimateur de Santé de Batterie',
|
|
130
|
+
description: 'Diagnostic technique de dégradation pour cellules Lithium-Ion.',
|
|
131
|
+
paramsTitle: 'Paramètres de Cellule',
|
|
132
|
+
voltageLabel: 'Tension Actuelle',
|
|
133
|
+
cyclesLabel: 'Cycles de Charge',
|
|
134
|
+
tempLabel: 'Température',
|
|
135
|
+
voltageHint: 'Plage nominale : 3,0V (vide) à 4,2V (plein).',
|
|
136
|
+
labelUsefulLife: 'Durée de Vie',
|
|
137
|
+
yearsPrefix: 'Est.',
|
|
138
|
+
yearsSuffix: 'ans',
|
|
139
|
+
metricThermalStress: 'Stress Thermique',
|
|
140
|
+
metricVoltageStress: 'Stress de Tension',
|
|
141
|
+
metricLithiumPlating: 'Lithium Plating',
|
|
142
|
+
statusExcelente: 'État Excellent',
|
|
143
|
+
statusBueno: 'État Bon',
|
|
144
|
+
statusRegular: 'État Moyen',
|
|
145
|
+
statusCritico: 'État Critique',
|
|
146
|
+
indicatorTempNormal: 'Normal',
|
|
147
|
+
indicatorTempCritical: 'Critique',
|
|
148
|
+
indicatorVoltageHigh: 'Élevée',
|
|
149
|
+
indicatorVoltageLow: 'Basse',
|
|
150
|
+
indicatorPlatingRisk: 'Risque Élevé',
|
|
151
|
+
indicatorPlatingOk: 'Sans Risque',
|
|
152
|
+
recTemp: "Réduisez la température ambiante ou améliorez la ventilation pour éviter l'oxydation de l'électrolyte.",
|
|
153
|
+
recVoltageHigh: "Évitez de maintenir la batterie à 100% de charge (4,2V) pendant de longues périodes.",
|
|
154
|
+
recVoltageLow: "Évitez les décharges profondes ; les cycles entre 20% et 80% doublent la durée de vie.",
|
|
155
|
+
recSohLow: "La capacité est tombée en dessous du standard optimal. Envisagez un remplacement si l'autonomie est insuffisante.",
|
|
156
|
+
recDefault: "Maintenez vos habitudes actuelles — votre batterie est dans une plage de fonctionnement idéale.",
|
|
157
|
+
},
|
|
158
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { HardwareToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
|
|
2
|
+
|
|
3
|
+
import EstimadorSaludBateriaComponent from './component.astro';
|
|
4
|
+
import EstimadorSaludBateriaSEO from './seo.astro';
|
|
5
|
+
import EstimadorSaludBateriaBibliography from './bibliography.astro';
|
|
6
|
+
|
|
7
|
+
import type { EstimadorSaludBateriaUI } from './ui';
|
|
8
|
+
export type EstimadorSaludBateriaLocaleContent = ToolLocaleContent<EstimadorSaludBateriaUI>;
|
|
9
|
+
|
|
10
|
+
import { content as es } from './i18n/es';
|
|
11
|
+
import { content as en } from './i18n/en';
|
|
12
|
+
import { content as fr } from './i18n/fr';
|
|
13
|
+
|
|
14
|
+
export const estimadorSaludBateria: HardwareToolEntry<EstimadorSaludBateriaUI> = {
|
|
15
|
+
id: 'estimador-salud-bateria',
|
|
16
|
+
icons: {
|
|
17
|
+
bg: 'mdi:battery-heart-variant',
|
|
18
|
+
fg: 'mdi:battery-charging-high',
|
|
19
|
+
},
|
|
20
|
+
i18n: {
|
|
21
|
+
es: async () => es,
|
|
22
|
+
en: async () => en,
|
|
23
|
+
fr: async () => fr,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export { EstimadorSaludBateriaComponent, EstimadorSaludBateriaSEO, EstimadorSaludBateriaBibliography };
|
|
28
|
+
|
|
29
|
+
export const ESTIMADOR_SALUD_BATERIA_TOOL: ToolDefinition = {
|
|
30
|
+
entry: estimadorSaludBateria,
|
|
31
|
+
Component: EstimadorSaludBateriaComponent,
|
|
32
|
+
SEOComponent: EstimadorSaludBateriaSEO,
|
|
33
|
+
BibliographyComponent: EstimadorSaludBateriaBibliography,
|
|
34
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import type { KnownLocale } from '../../types';
|
|
4
|
+
import { estimadorSaludBateria } from './index';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await estimadorSaludBateria.i18n[locale]?.();
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface EstimadorSaludBateriaUI extends Record<string, string> {
|
|
2
|
+
badge: string;
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
paramsTitle: string;
|
|
6
|
+
voltageLabel: string;
|
|
7
|
+
cyclesLabel: string;
|
|
8
|
+
tempLabel: string;
|
|
9
|
+
voltageHint: string;
|
|
10
|
+
labelUsefulLife: string;
|
|
11
|
+
yearsPrefix: string;
|
|
12
|
+
yearsSuffix: string;
|
|
13
|
+
metricThermalStress: string;
|
|
14
|
+
metricVoltageStress: string;
|
|
15
|
+
metricLithiumPlating: string;
|
|
16
|
+
statusExcelente: string;
|
|
17
|
+
statusBueno: string;
|
|
18
|
+
statusRegular: string;
|
|
19
|
+
statusCritico: string;
|
|
20
|
+
indicatorTempNormal: string;
|
|
21
|
+
indicatorTempCritical: string;
|
|
22
|
+
indicatorVoltageHigh: string;
|
|
23
|
+
indicatorVoltageLow: string;
|
|
24
|
+
indicatorPlatingRisk: string;
|
|
25
|
+
indicatorPlatingOk: string;
|
|
26
|
+
recTemp: string;
|
|
27
|
+
recVoltageHigh: string;
|
|
28
|
+
recVoltageLow: string;
|
|
29
|
+
recSohLow: string;
|
|
30
|
+
recDefault: string;
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { KnownLocale } from '../../types';
|
|
3
|
+
import { pixelesPantalla } from './index';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
locale?: KnownLocale;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const { locale = 'es' } = Astro.props;
|
|
10
|
+
const content = await pixelesPantalla.i18n[locale]?.();
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
{
|
|
14
|
+
content && content.bibliography.length > 0 && (
|
|
15
|
+
<article class="prose prose-lg dark:prose-invert max-w-4xl mx-auto mt-20 px-6 font-sans">
|
|
16
|
+
<h2 class="text-3xl font-black dark:text-blue-100 mb-8 tracking-tight">
|
|
17
|
+
{content.bibliographyTitle}
|
|
18
|
+
</h2>
|
|
19
|
+
<ul>
|
|
20
|
+
{content.bibliography.map((item) => (
|
|
21
|
+
<li>
|
|
22
|
+
<a href={item.url} target="_blank" rel="noopener noreferrer">
|
|
23
|
+
{item.name}
|
|
24
|
+
</a>
|
|
25
|
+
</li>
|
|
26
|
+
))}
|
|
27
|
+
</ul>
|
|
28
|
+
</article>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|