Chantier etapes 5b et 5c : recalcul quotidien des profils et fenetre de deficit suivante
5c — BALANCE ne repondait qu'a "combien jusqu'a ce que le solaire prenne le relais". A 15 h la reponse est zero : exacte mais inutile, le deficit qui approche etant celui de la nuit. Ajout de la prochaine traversee deficitaire (heure de debut, energie, SOC a atteindre avant). Ce SOC n'est PAS ecrete a 100 % : au-dela, meme une batterie pleine ne passe pas, et le manque est publie comme storage_shortfall_kwh — c'est le chiffre du dimensionnement. 5b — Workflow "EVCS Energy Profiles Daily V1" (N6UaB4ZozsbRPrFb), actif, 03:30 : lit /api/history/period sur 30 jours glissants et republie les quatre CSV (conso p50 et p80, enveloppe de production, taux de censure). CONSUMPTION_PROFILE devient DAILY_PROFILES et sait desormais decoder la reponse brute de l'API en plus des series deja pretes. Piege trouve : sans end_time, /api/history/period ne renvoie qu'UNE journee, silencieusement. Mes premieres mesures "sur 3 jours" n'en couvraient qu'une. Validation croisee : profils calcules depuis l'API REST (etats bruts, 11 j) contre profils calcules depuis les statistiques long terme (28 j) — 0,20 kWh/h d'ecart absolu moyen, par deux chemins de donnees independants. BUILD_HA_CALLS_PROFILES refuse d'ecraser les profils en place si l'historique ne couvre pas les 24 heures. Meme garantie de perimetre que le bilan. Suite a 27 scenarios. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -31,7 +31,7 @@ function syntheticSeries({ days = 10, houseKwhPerHour = 1, evcsKwhAt14h = 3 } =
|
||||
|
||||
export const profileScenarios = [
|
||||
{
|
||||
node: 'CONSUMPTION_PROFILE',
|
||||
node: 'DAILY_PROFILES',
|
||||
id: 'profil-historique-reel',
|
||||
label: '28 jours réels : profil complet sur 24 heures, aucun compteur remis à zéro',
|
||||
snapshot: { series: history.series, nowMs: NOW },
|
||||
@@ -45,7 +45,7 @@ export const profileScenarios = [
|
||||
},
|
||||
},
|
||||
{
|
||||
node: 'CONSUMPTION_PROFILE',
|
||||
node: 'DAILY_PROFILES',
|
||||
id: 'evcs-retire-du-profil',
|
||||
label: 'La charge du véhicule est retirée : le profil reste plat à 1 kWh/h, y compris à 14 h',
|
||||
snapshot: { series: syntheticSeries(), nowMs: NOW },
|
||||
@@ -56,7 +56,7 @@ export const profileScenarios = [
|
||||
},
|
||||
},
|
||||
{
|
||||
node: 'CONSUMPTION_PROFILE',
|
||||
node: 'DAILY_PROFILES',
|
||||
id: 'compteur-remis-a-zero',
|
||||
label: 'Remise à zéro du compteur (redémarrage HA) : l\'échantillon est jeté, pas inventé',
|
||||
snapshot: (() => {
|
||||
@@ -74,7 +74,7 @@ export const profileScenarios = [
|
||||
},
|
||||
},
|
||||
{
|
||||
node: 'CONSUMPTION_PROFILE',
|
||||
node: 'DAILY_PROFILES',
|
||||
id: 'historique-trop-court',
|
||||
label: '3 jours seulement : les heures sont marquées non fiables plutôt que publiées en silence',
|
||||
snapshot: { series: syntheticSeries({ days: 3 }), nowMs: NOW },
|
||||
|
||||
Reference in New Issue
Block a user