Un appareil qui consomme 1 000 W en continu n’a pas le même coût avec un tarif unique et avec des heures creuses. La moyenne arithmétique des deux prix est trompeuse si leurs durées diffèrent. Voici une fonction sans dépendance pour un simulateur local : aucun compte, aucune API et aucune donnée transmise.
Le modèle, avant le code
Pour chaque plage : énergie (kWh) = puissance (W) / 1 000 × durée (h) ; puis coût (€) = énergie × prix (€/kWh). On additionne les coûts des plages, et non leurs prix.
L’exemple est fictif, pas une offre d’électricité : 8 h à 0,15 €/kWh et 16 h à 0,30 €/kWh. À 1 000 W, cela donne 24 kWh et 6 € par jour, soit 180 € pour 30 journées identiques. La moyenne simple des prix donnerait 5,40 €/jour : elle sous-estimerait ici le coût de 10 %.
Une fonction avec des limites explicites
function estimateEnergy(watts, slots, days = 30) {
if (!Number.isFinite(watts) || watts < 0) throw new RangeError('Invalid watts');
if (!Number.isInteger(days) || days < 1 || days > 366) throw new RangeError('Invalid days');
if (!Array.isArray(slots) || slots.length === 0) throw new RangeError('Missing slots');
let hours = 0, dailyKwh = 0, dailyEur = 0;
for (const slot of slots) {
if (!slot || !Number.isFinite(slot.hours) || slot.hours < 0 || slot.hours > 24 ||
!Number.isFinite(slot.eurKwh) || slot.eurKwh < 0) throw new RangeError('Invalid slot');
hours += slot.hours;
const kwh = watts / 1000 * slot.hours;
dailyKwh += kwh;
dailyEur += kwh * slot.eurKwh;
}
if (Math.abs(hours - 24) > 1e-9) throw new RangeError('Slots must cover 24 hours');
return {dailyKwh, dailyEur, periodKwh: dailyKwh * days, periodEur: dailyEur * days};
}
const example = estimateEnergy(1000, [
{ hours: 8, eurKwh: 0.15 },
{ hours: 16, eurKwh: 0.30 },
], 30);
console.log(example);
// {dailyKwh: 24, dailyEur: 6, periodKwh: 720, periodEur: 180}
La fonction refuse les nombres sous forme de chaînes : dans un formulaire, convertissez les valeurs puis validez-les. Vérifiez d’abord qu’un champ n’est pas vide (Number('') vaut zéro). Elle refuse aussi les valeurs non finies et les journées qui ne totalisent pas 24 h. Les tarifs négatifs ne sont pas pris en charge par ce petit modèle ; un simulateur de prix dynamiques doit traiter ce cas volontairement.
Vérifications reproductibles
const slots = [{hours: 8, eurKwh: 0.15}, {hours: 16, eurKwh: 0.30}];
console.assert(estimateEnergy(1000, slots).periodEur === 180);
console.assert(Math.abs(estimateEnergy(200, slots).periodEur - 36) < 1e-9);
console.assert(estimateEnergy(0, slots).periodEur === 0);
Nous avons également vérifié les rejets suivants : 23 h au total, NaN, une puissance sous forme de chaîne, un prix négatif, zéro jour et une plage null. Arrondissez uniquement à l’affichage : les arrondis intermédiaires peuvent s’accumuler.
Passer d’une fiche technique à une estimation utile
Pour un mini-PC, une station IA ou un mineur ASIC, utilisez de préférence une consommation mesurée à la prise avec un appareil adapté à la charge. La puissance d’une alimentation est sa capacité nominale, pas une mesure de la consommation. Les ventilateurs et les pertes de conversion peuvent expliquer un écart avec les chiffres d’une fiche produit.
Ce calcul suppose une puissance constante, des journées identiques de 24 h et des tarifs fournis dans la même base fiscale. Il n’intègre ni abonnement, ni coût du matériel, ni refroidissement externe, ni jours de changement d’heure, ni variations de charge. Un modèle horaire réel devrait intégrer les mesures horodatées et le calendrier du fournisseur. Il ne calcule aucun revenu de minage et ne promet pas de rentabilité.
À propos de l’auteur : cette note est publiée par l’équipe de Mineshop.eu, matériel de minage et informatique. Nous vendons du matériel : ce lien est une référence commerciale de l’auteur, pas une recommandation indépendante. Les montants ci-dessus sont des exemples arithmétiques, pas des résultats de tests matériels.
Texte et code préparés avec une assistance IA, puis vérifiés par des tests arithmétiques. Les hypothèses et limites font partie du résultat.
Top comments (0)