Prevision de nuit : mode jour (plus de fausse reponse sur la nuit ecoulee)
Le jour, sans rien a couvrir avant le retour du solaire, le texte parlait de la nuit ecoulee (« 0 kWh jusqu au retour du solaire vers 10 h, la batterie suffit »). Etat `jour` : la prevision se fait le soir, avec un repere provisoire (prochaine traversee prudente) et l'achat si EDF s'engage. Diagnostics 87/87. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011uJ47NxgfpGnuuMr3f2n7Z
This commit is contained in:
15
HANDOFF.md
15
HANDOFF.md
@@ -1158,8 +1158,19 @@ affiner ; demarrage solaire de l'apres-midi toujours non couvert par le besoin d
|
|||||||
« EDF sera branche de 01:24 a 07:24 : environ 4,6 kWh achetes en heures creuses (maison
|
« EDF sera branche de 01:24 a 07:24 : environ 4,6 kWh achetes en heures creuses (maison
|
||||||
4,5, batterie 0,14), car la maison passe la nuit sur le reseau ». Bilan 72/72,
|
4,5, batterie 0,14), car la maison passe la nuit sur le reseau ». Bilan 72/72,
|
||||||
diagnostics 85/85, mutations qui mordent (une premiere ne mordait pas : scenario a
|
diagnostics 85/85, mutations qui mordent (une premiere ne mordait pas : scenario a
|
||||||
03:00 pile, horizon sans tranche anterieure -> deplace a 03:30). Fiche de l'agent a
|
03:00 pile, horizon sans tranche anterieure -> deplace a 03:30). Fiche mise a jour par SPARK
|
||||||
mettre a jour par SPARK.
|
(l'agent recopie `prevision-nuit.js`, qui imprime `texte_rapport` : aucun attribut lu).
|
||||||
|
- **Mode jour** (remarque de SPARK, banc 10:49 : « combien d'EDF la nuit prochaine ? » ->
|
||||||
|
« la maison doit couvrir 0 kWh jusqu'au retour du solaire vers 10 h, la batterie
|
||||||
|
suffit », qui parlait de la nuit ECOULEE). Quand plus rien n'est a couvrir avant le
|
||||||
|
retour du solaire et sans session : etat/verdict `jour`, « il est trop tot pour la
|
||||||
|
prevision de la nuit : elle se calcule le soir … repere provisoire, profil prudent :
|
||||||
|
pour passer de 18 h a 09 h sans EDF (17,87 kWh), il faudrait la batterie a 82 % a
|
||||||
|
18 h ; si EDF s'engage a 01:24, la maison y achetera environ 4,2 kWh ». Attributs
|
||||||
|
`prochaine_traversee*`. Diagnostics 87/87, mutation qui mord. En reel a 10:53.
|
||||||
|
- SPARK : les transcripts SQLite (`openclaw-agent.sqlite`, droits 600) remontent au
|
||||||
|
18/07, AUCUNE rotation ; un evenement contient le jeton HA (l'agent a lu `.ha-token`).
|
||||||
|
Signale au proprietaire par SPARK, base non modifiee.
|
||||||
|
|
||||||
---
|
---
|
||||||
*Document mis a jour le : 29/09/2026 (~10:50) — nuit du 28-29 verifiee, achat EDF annonce = maison en HC + manque batterie ; regle HC active, vehicule branche a midi (JEEP/VW/ZERO), prevision de nuit a trois verdicts, nuits superposees et bilan recale sur la soiree*
|
*Document mis a jour le : 29/09/2026 (~10:50) — nuit du 28-29 verifiee, achat EDF annonce = maison en HC + manque batterie ; regle HC active, vehicule branche a midi (JEEP/VW/ZERO), prevision de nuit a trois verdicts, nuits superposees et bilan recale sur la soiree*
|
||||||
|
|||||||
@@ -397,6 +397,31 @@ for (const [nom, r, test] of imp) {
|
|||||||
'input_boolean.victron_evcs_night_grid_session_committed': 'off', 'input_number.evcs_balance_night_hc_house_kwh': '4.46',
|
'input_boolean.victron_evcs_night_grid_session_committed': 'off', 'input_number.evcs_balance_night_hc_house_kwh': '4.46',
|
||||||
})) m.set(k, { state: v }); return previsionNuit(m, t); })(),
|
})) m.set(k, { state: v }); return previsionNuit(m, t); })(),
|
||||||
(r) => r.etat === 0 && r.attributs.verdict === 'juste' && /la maison y achetera alors environ 4,5 kWh/.test(r.attributs.explication)],
|
(r) => r.etat === 0 && r.attributs.verdict === 'juste' && /la maison y achetera alors environ 4,5 kWh/.test(r.attributs.explication)],
|
||||||
|
// Releve REEL du 29/09 10:45 (banc SPARK) : « la maison doit couvrir 0 kWh
|
||||||
|
// jusqu au retour du solaire vers 10 h … la batterie suffit » en reponse a
|
||||||
|
// « combien d EDF la nuit prochaine ? ».
|
||||||
|
['29/09 10:45 : le jour, pas de fausse prevision de nuit, un repere provisoire', (() => {
|
||||||
|
const m = base(); for (const [k, v] of Object.entries({
|
||||||
|
'input_number.evcs_balance_energy_to_cover_kwh': '0', 'input_boolean.evcs_balance_grid_needed': 'off',
|
||||||
|
'input_number.evcs_balance_grid_energy_needed_kwh': '0', 'input_text.evcs_balance_crossing_hour': '10 h',
|
||||||
|
'input_number.evcs_balance_required_soc': '22', 'input_number.evcs_balance_required_soc_prudent': '22',
|
||||||
|
'sensor.victron_battery_soc': '46', 'input_boolean.victron_evcs_night_grid_session_committed': 'off',
|
||||||
|
'sensor.evcs_reseau': 'non_raccorde', 'input_number.evcs_balance_night_hc_house_kwh': '4.16',
|
||||||
|
'input_datetime.victron_evcs_hc_night_start': '01:24:00', 'input_datetime.victron_evcs_hc_night_stop': '07:24:00',
|
||||||
|
'input_text.evcs_balance_next_deficit_window': '18 h → 09 h',
|
||||||
|
'input_number.evcs_balance_next_deficit_required_soc': '81.6', 'input_number.evcs_balance_next_deficit_kwh': '17.87',
|
||||||
|
})) m.set(k, { state: v }); return previsionNuit(m, t); })(),
|
||||||
|
(r) => r.etat === 'jour' && r.attributs.verdict === 'jour'
|
||||||
|
&& /trop tot pour la prevision de la nuit/.test(r.attributs.texte_rapport)
|
||||||
|
&& /de 18 h a 09 h sans EDF \(environ 17,87 kWh\), il faudrait la batterie a 82 % a 18 h/.test(r.attributs.texte_rapport)
|
||||||
|
&& /Si EDF s engage a 01:24, la maison y achetera environ 4,2 kWh jusqu a 07:24/.test(r.attributs.texte_rapport)
|
||||||
|
&& !/batterie suffit/.test(r.attributs.texte_rapport) && !/couvrir environ 0 kWh/.test(r.attributs.texte_rapport)],
|
||||||
|
['le jour, fenetre de deficit inconnue -> pas de repere invente', (() => {
|
||||||
|
const m = base(); for (const [k, v] of Object.entries({
|
||||||
|
'input_number.evcs_balance_energy_to_cover_kwh': '0', 'input_boolean.evcs_balance_grid_needed': 'off',
|
||||||
|
'input_boolean.victron_evcs_night_grid_session_committed': 'off', 'input_text.evcs_balance_next_deficit_window': 'déficit en cours',
|
||||||
|
})) m.set(k, { state: v }); return previsionNuit(m, t); })(),
|
||||||
|
(r) => r.etat === 'jour' && !/Repere provisoire/.test(r.attributs.texte_rapport)],
|
||||||
['plus jamais d attribut reseau_necessaire_kwh (lu comme un achat le 28/09)', previsionNuit(base(), t),
|
['plus jamais d attribut reseau_necessaire_kwh (lu comme un achat le 28/09)', previsionNuit(base(), t),
|
||||||
(r) => !('reseau_necessaire_kwh' in r.attributs) && 'import_prevu_kwh' in r.attributs],
|
(r) => !('reseau_necessaire_kwh' in r.attributs) && 'import_prevu_kwh' in r.attributs],
|
||||||
['jamais d attribut qui ressemble a un SOC du matin (incident 21:16)', previsionNuit(base(), t),
|
['jamais d attribut qui ressemble a un SOC du matin (incident 21:16)', previsionNuit(base(), t),
|
||||||
|
|||||||
@@ -658,6 +658,31 @@ export function previsionNuit(st, maintenant = new Date()) {
|
|||||||
`Le systeme refait le calcul ${hc} : si la soiree a consomme davantage, il prendra EDF en heures creuses` +
|
`Le systeme refait le calcul ${hc} : si la soiree a consomme davantage, il prendra EDF en heures creuses` +
|
||||||
`${maisonHcKwh !== null ? `, et la maison y achetera alors environ ${kwh(Math.round(maisonHcKwh * 10) / 10)} kWh` : ''}.`,
|
`${maisonHcKwh !== null ? `, et la maison y achetera alors environ ${kwh(Math.round(maisonHcKwh * 10) / 10)} kWh` : ''}.`,
|
||||||
}[verdict];
|
}[verdict];
|
||||||
|
// LE JOUR (29/09, remarque de SPARK) : plus rien a couvrir avant le retour
|
||||||
|
// du solaire = le solaire couvre deja la maison. Le texte « la maison doit
|
||||||
|
// couvrir 0 kWh jusqu au retour du solaire vers 10 h » parlait alors de la
|
||||||
|
// nuit ECOULEE, et une question « et cette nuit ? » posee a midi recevait
|
||||||
|
// une reponse fausse. La vraie prevision se fait le soir, sur la soiree
|
||||||
|
// reelle (facteur de nuit) et la decision de 01:24. Le jour, on le dit, avec
|
||||||
|
// un repere provisoire : la prochaine traversee du bilan (profil PRUDENT).
|
||||||
|
if (aCouvrir <= 0 && !session) {
|
||||||
|
const fen = txt('input_text.evcs_balance_next_deficit_window');
|
||||||
|
const m = fen ? fen.match(/^(\d{2}) h → (\d{2}) h/) : null;
|
||||||
|
const ndSoc = nombre(st, 'input_number.evcs_balance_next_deficit_required_soc');
|
||||||
|
const ndKwh = nombre(st, 'input_number.evcs_balance_next_deficit_kwh');
|
||||||
|
const repere = m && ndSoc !== null && ndKwh !== null
|
||||||
|
? ` Repere provisoire, profil prudent : pour passer de ${m[1]} h a ${m[2]} h sans EDF (environ ${kwh(ndKwh)} kWh), ` +
|
||||||
|
`il faudrait la batterie a ${kwh(Math.round(ndSoc))} % a ${m[1]} h.`
|
||||||
|
: '';
|
||||||
|
const achatSi = maisonHcKwh !== null
|
||||||
|
? ` Si EDF s engage ${hc}, la maison y achetera environ ${kwh(Math.round(maisonHcKwh * 10) / 10)} kWh ${jusqua}.` : '';
|
||||||
|
const texteJour = `Il est trop tot pour la prevision de la nuit : elle se calcule le soir, sur la consommation reelle ` +
|
||||||
|
`de la soiree, et la decision d EDF se prend ${hc}.${repere}${achatSi} Batterie a ${soc !== null ? Math.round(soc) : '?'} % maintenant.`;
|
||||||
|
return { etat: 'jour', attributs: { ...attributs, verdict: 'jour', statut: 'jour',
|
||||||
|
prochaine_traversee: m ? `${m[1]} h -> ${m[2]} h` : null,
|
||||||
|
prochaine_traversee_soc_requis_pct: m ? ndSoc : null, prochaine_traversee_kwh: m ? ndKwh : null,
|
||||||
|
explication: texteJour, texte_rapport: texteJour } };
|
||||||
|
}
|
||||||
const texte = `La maison doit couvrir environ ${aCouvrir} kWh jusqu au retour du solaire vers ${retour}. ` +
|
const texte = `La maison doit couvrir environ ${aCouvrir} kWh jusqu au retour du solaire vers ${retour}. ` +
|
||||||
`${edf} Batterie a ${soc !== null ? Math.round(soc) : '?'} %. ${voiture}`;
|
`${edf} Batterie a ${soc !== null ? Math.round(soc) : '?'} %. ${voiture}`;
|
||||||
const etat = verdict === 'edf_engage' || verdict === 'reseau_necessaire' ? (importPrevu ?? manqueKwh) : 0;
|
const etat = verdict === 'edf_engage' || verdict === 'reseau_necessaire' ? (importPrevu ?? manqueKwh) : 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user