La prevision se juge sur la date qu elle decrit, plus sur son age
Nuit du 07 au 08/09 : 32 calculs du bilan sur 120 en statut degrade, tous entre 00 h et 03 h, avec « aucun croisement PV/conso sur l'horizon, 47,6 kWh a couvrir ». Le controleur, qui exige statut=ok, retombait sur le palier de 35 % — d'ou une cible du matin oscillant entre 35, 78,8 et 85 % au lieu de decroitre. Cause immediate : plus aucune publication de prevision de 23:45 a 04:30. Le noeud d'appel porte neverError, donc les executions restaient en success ; la reponse etait « socket hang up », et le noeud d'ecriture vers Home Assistant rendait 0 item la nuit contre 1 en journee — le .17 etait lui aussi injoignable, si bien que le message d'echec ne pouvait meme pas etre publie. Mais le defaut qu'on controle est ailleurs : les courbes sont publiees sans leur date, et PARSE_FORECAST prend days[0] pour « aujourd'hui ». Vrai a l'instant de la publication, faux des qu'on passe minuit sans rafraichir. A 00:45 le bilan a donc lu comme journee en cours celle du 7, dont toutes les heures etaient passees. Une courbe est desormais utilisable si elle DECRIT le jour dont on a besoin, pas si elle est recente : une prevision publiee a 23:45 pour le 8 reste exacte a 03:00, la nuit il n'y a rien a reactualiser. La date part dans evcs_balance_forecast_day0, et RESOURCE_ESTIMATE distingue trois cas — a jour, decalee d'un jour (la courbe du lendemain devient celle du jour, l'enveloppe mesuree reprend la main pour demain), perimee. Helper absent : ancienne garde d'age, comportement inchange. Le rapport de nuit signale un trou de plus de deux heures dans les publications. Il lit la base sur l'autre NAS, seul temoin qui survit quand le .17 est injoignable. Verifie sur la nuit ecoulee : 285 minutes. Tests 44 -> 48. Les quatre scenarios partagent la meme heure — 00:45, l'instant du decrochage — et les memes courbes : seule la date change. Quatre mutations, chacune sur un jeu different, chaque scenario ayant la sienne. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
@@ -167,6 +167,28 @@ export async function texteRapport(client, jour = new Date()) {
|
||||
: 'C\'est du bruit de regulation, sans consequence.');
|
||||
}
|
||||
|
||||
// ------------------------------------------------ prevision solaire
|
||||
// Une panne de prevision est invisible autrement : les nodes n8n portent
|
||||
// `onError: continueRegularOutput`, donc les executions restent « success »
|
||||
// meme quand l'appel echoue, et quand Home Assistant est lui aussi
|
||||
// injoignable le message d'echec ne peut meme pas etre publie. Le service
|
||||
// d'historisation, lui, tourne sur l'autre NAS : c'est le seul temoin qui
|
||||
// survit. Releve de la nuit du 07 au 08/09 : 4 h 45 sans une seule
|
||||
// publication, et personne ne l'a su avant le lendemain.
|
||||
const { rows: [prev] } = await q(
|
||||
`SELECT round(EXTRACT(EPOCH FROM max(ecart)) / 60) AS trou
|
||||
FROM (SELECT publie_a - lag(publie_a) OVER (ORDER BY publie_a) AS ecart
|
||||
FROM prevision WHERE publie_a >= $1 AND publie_a < $2) t`,
|
||||
[debut, fin]);
|
||||
const trouMin = Number(prev?.trou ?? 0);
|
||||
if (trouMin >= 120) {
|
||||
const h = Math.floor(trouMin / 60);
|
||||
const m = trouMin % 60;
|
||||
dire(`Attention, la prevision solaire n'a pas ete rafraichie pendant ${h} heure${h > 1 ? 's' : ''}`
|
||||
+ `${m ? ` et ${m} minutes` : ''}. Le bilan a donc travaille sur une courbe`
|
||||
+ ' vieillissante pendant ce temps, et la cible de la nuit a pu retomber sur la regle des paliers.');
|
||||
}
|
||||
|
||||
// ------------------------------------------------ anomalies
|
||||
const { rows: soucis } = await q(
|
||||
`SELECT resume FROM evenement WHERE ts >= $1 AND ts < $2
|
||||
|
||||
Reference in New Issue
Block a user