Les observations du conseiller cessent de s evaporer
Ses helpers sont ecrases toutes les quinze minutes : un signalement grave emis a 3 h du matin avait disparu au reveil, et rien dans la memoire du projet n en gardait trace. C est precisement ce que le proprietaire demandait quand il a dit vouloir un outil pour garder une trace des evolutions — voir un comportement idiot du systeme ne sert a rien si personne ne peut le relire le lendemain. Une table `observation`, alimentee par le service d historisation, clef sur l horodatage du marqueur du conseiller : rejouer un cycle n invente rien et un conseiller a l arret n ecrit pas la meme ligne toutes les minutes. La confiance est extraite de `_reason` (« [NN%] la piste ») pour rester interrogeable sans decouper une chaine en SQL. `node tools/enquete.mjs observations [heures] [gravite]` ne montre par defaut que ce qui a ete signale, et compte a part les cycles calmes : un observateur qui fonctionne est silencieux la plupart du temps, et noyer les signalements sous des centaines de « rien a dire » les rendrait invisibles. Essai a blanc : observation=1, le service ecrirait bien sa ligne. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
@@ -66,6 +66,7 @@ if (!commande || commande === 'outils') {
|
||||
{ nom: 'decisions', usage: 'decisions <workflowId> <hhmm_debut> <hhmm_fin> [date]', quoi: 'ce qu un workflow n8n a decide, cycle par cycle' },
|
||||
{ nom: 'ecrivains', usage: 'ecrivains <entite>', quoi: 'qui peut ecrire sur un actionneur, et qui en est le proprietaire declare' },
|
||||
{ nom: 'bilan', usage: 'bilan [heures=6]', quoi: 'ce que le bilan energetique demandait' },
|
||||
{ nom: 'observations', usage: 'observations [heures=24] [gravite]', quoi: 'ce que le conseiller a signale, et a quelle gravite' },
|
||||
{ nom: 'cherche', usage: 'cherche <motif>', quoi: 'ou ce motif apparait dans les automatisations, scripts et paquets Home Assistant' },
|
||||
],
|
||||
});
|
||||
@@ -144,6 +145,25 @@ if (!commande || commande === 'outils') {
|
||||
and extract(minute from ts at time zone 'Europe/Paris')::int % 30 = 0 order by ts desc limit 40`);
|
||||
sortie({ lignes: r.map(([h2, statut, soc, requis, couvrir, croisement, reseau]) =>
|
||||
({ h: h2, statut, soc: Number(soc), soc_requis: Number(requis), a_couvrir_kwh: Number(couvrir), croisement, reseau_necessaire: reseau === 't' })) });
|
||||
} else if (commande === 'observations') {
|
||||
// Par defaut on ne montre QUE ce qui a ete signale : un conseiller qui
|
||||
// fonctionne est silencieux la plupart du temps, et noyer les signalements
|
||||
// dans des centaines de « rien a dire » les rendrait invisibles.
|
||||
const [h = '24', gravite] = args;
|
||||
const filtre = gravite ? `and gravite = '${gravite.replace(/'/g, '')}'` : "and gravite <> 'aucune'";
|
||||
const r = sql(`select to_char(ts at time zone 'Europe/Paris','DD/MM HH24:MI'), gravite,
|
||||
constat, ce_qui_cloche, piste, round(soc_pct), statut
|
||||
from observation where ts > now() - interval '${Number(h)} hours' ${filtre}
|
||||
order by ts desc limit 40`);
|
||||
const calmes = sql(`select count(*) from observation
|
||||
where ts > now() - interval '${Number(h)} hours' and gravite = 'aucune'`);
|
||||
sortie({
|
||||
fenetre_heures: Number(h),
|
||||
cycles_calmes: Number(calmes[0]?.[0] ?? 0),
|
||||
signalements: r.length,
|
||||
lignes: r.map(([q, g, c, cl, p, soc, st]) =>
|
||||
({ quand: q, gravite: g, constat: c, ce_qui_cloche: cl, piste: p, soc: Number(soc), statut: st })),
|
||||
});
|
||||
} else if (commande === 'cherche') {
|
||||
const [motif] = args;
|
||||
const trouves = [];
|
||||
|
||||
Reference in New Issue
Block a user