Prevision de nuit : « c'est juste » quand seul le profil habituel passe (incident 28/09 21:16)
Trois verdicts au lieu de deux ; « la batterie suffit » exige le requis PRUDENT. Attribut soc_requis_maintenant_pct (l'ancien nom se lisait comme un SOC du matin). Tests 73/73, mutation qui mord. 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:
@@ -307,8 +307,37 @@ for (const [nom, r, test] of imp) {
|
||||
(r) => !/73\.7|26\.95/.test(JSON.stringify(r))],
|
||||
['bilan perime (> 30 min) -> indisponible', previsionNuit(base(), new Date('2026-09-28T00:30:00Z')),
|
||||
(r) => r.etat === 'indisponible'],
|
||||
['reseau non necessaire -> 0 et « la batterie suffit »', (() => { const m = base(); m.set('input_boolean.evcs_balance_grid_needed', { state: 'off' }); return previsionNuit(m, t); })(),
|
||||
(r) => r.etat === 0 && /batterie suffit/.test(r.attributs.explication)],
|
||||
['session engagee -> « EDF est branche pour la nuit », jamais « la batterie suffit »', previsionNuit(base(), t),
|
||||
(r) => r.attributs.verdict === 'edf_engage' && /EDF est branche pour la nuit/.test(r.attributs.explication)
|
||||
&& !/batterie suffit/.test(r.attributs.explication)],
|
||||
// Releve REEL du 28/09 21:15 (reponse contestee par le proprietaire) :
|
||||
// requis 57,5 %, SOC 58, prudent 68,5, pas de session. « La batterie suffit,
|
||||
// sans EDF » etait faux : 0,5 point de marge sur le profil habituel.
|
||||
['28/09 21:15 : marge 0,5 point, prudent 68,5 > SOC 58 -> « c est juste », decision reprise a 01:24', (() => {
|
||||
const m = base(); for (const [k, v] of Object.entries({
|
||||
'input_boolean.evcs_balance_grid_needed': 'off', 'input_number.evcs_balance_required_soc': '57.5',
|
||||
'input_number.evcs_balance_required_soc_prudent': '68.5', 'sensor.victron_battery_soc': '58',
|
||||
'input_boolean.victron_evcs_night_grid_session_committed': 'off', 'sensor.evcs_reseau': 'non_raccorde',
|
||||
'input_number.evcs_balance_energy_to_cover_kwh': '10.64', 'input_datetime.victron_evcs_hc_night_start': '01:24:00',
|
||||
})) m.set(k, { state: v }); return previsionNuit(m, t); })(),
|
||||
(r) => r.etat === 0 && r.attributs.verdict === 'juste' && r.attributs.marge_points === 0.5
|
||||
&& /C est juste/.test(r.attributs.explication) && /a 01:24/.test(r.attributs.explication)
|
||||
&& !/sans EDF/.test(r.attributs.explication) && !/batterie suffit jusqu/.test(r.attributs.explication)],
|
||||
['SOC au-dessus du requis PRUDENT -> « la batterie suffit »', (() => {
|
||||
const m = base(); for (const [k, v] of Object.entries({
|
||||
'input_boolean.evcs_balance_grid_needed': 'off', 'input_number.evcs_balance_required_soc': '40',
|
||||
'input_number.evcs_balance_required_soc_prudent': '55', 'sensor.victron_battery_soc': '70',
|
||||
'input_boolean.victron_evcs_night_grid_session_committed': 'off',
|
||||
})) m.set(k, { state: v }); return previsionNuit(m, t); })(),
|
||||
(r) => r.attributs.verdict === 'batterie_suffit' && /batterie suffit jusqu au retour du solaire/.test(r.attributs.explication)],
|
||||
['prudent illisible -> jamais « la batterie suffit », mais « c est juste »', (() => {
|
||||
const m = base(); for (const [k, v] of Object.entries({
|
||||
'input_boolean.evcs_balance_grid_needed': 'off', 'input_number.evcs_balance_required_soc': '40',
|
||||
'sensor.victron_battery_soc': '70', 'input_boolean.victron_evcs_night_grid_session_committed': 'off',
|
||||
})) m.set(k, { state: v }); return previsionNuit(m, t); })(),
|
||||
(r) => r.attributs.verdict === 'juste'],
|
||||
['jamais d attribut qui ressemble a un SOC du matin (incident 21:16)', previsionNuit(base(), t),
|
||||
(r) => !('soc_requis_au_retour_solaire_pct' in r.attributs) && 'soc_requis_maintenant_pct' in r.attributs],
|
||||
];
|
||||
for (const [nom, r, test] of pn) {
|
||||
const ok = test(r); if (!ok) { ko++; console.log(JSON.stringify(r)); }
|
||||
|
||||
Reference in New Issue
Block a user