Historisation : allers-retours brefs de la borne et du contacteur retrouves dans l'historique HA (echange VW -> JEEP de 20 s)

This commit is contained in:
Tallagrand Thierry
2026-10-06 23:28:56 +02:00
parent f189df588d
commit 28851c83e4
4 changed files with 166 additions and 7 deletions

View File

@@ -0,0 +1,44 @@
#!/usr/bin/env node
// Allers-retours brefs retrouves dans l'historique HA (06/10/2026).
// Usage : node tests/allers-retours/run.mjs
import { transitionsDansSerie } from '../../tools/allers-retours.mjs';
let ok = 0, ko = 0;
function verifie(nom, obtenu, attendu) {
const a = JSON.stringify(obtenu), b = JSON.stringify(attendu);
if (a === b) { ok++; console.log(`✅ ${nom}`); }
else { ko++; console.log(`❌ ${nom}\n attendu ${b}\n obtenu ${a}`); }
}
const s = (state, last_changed) => ({ state, last_changed });
// Cas reel du 06/10 : echange VW -> JEEP en 20 s, entre deux cycles.
// L'historique HA commence par l'etat a l'instant de debut (16:16:10).
const reel = [
s('on', '2026-10-06T14:16:10.124Z'),
s('off', '2026-10-06T17:52:36.000Z'),
s('on', '2026-10-06T17:52:56.474Z'),
];
verifie('echange-20s-du-06-10',
transitionsDansSerie(reel, 'on', '2026-10-06T14:16:10.124Z', '2026-10-06T17:52:56.474Z'),
[{ avant: 'on', apres: 'off', a: '2026-10-06T17:52:36.000Z' },
{ avant: 'off', apres: 'on', a: '2026-10-06T17:52:56.474Z' }]);
// Un hoquet d'indisponibilite n'est pas un branchement.
verifie('indisponible-ignore',
transitionsDansSerie([s('on', '2026-10-06T14:16:10Z'), s('unavailable', '2026-10-06T15:00:00Z'), s('on', '2026-10-06T15:00:05Z')],
'on', '2026-10-06T14:16:10Z', '2026-10-06T15:00:05Z'),
[]);
// L'entree de depart (= dernier changement deja vu) n'est pas rejouee.
verifie('point-de-depart-exclu',
transitionsDansSerie([s('on', '2026-10-06T14:16:10Z')], 'on', '2026-10-06T14:16:10Z', '2026-10-06T14:16:10Z'),
[]);
// Deux allers-retours dans le meme intervalle : les quatre transitions, dans l'ordre.
verifie('deux-allers-retours',
transitionsDansSerie([s('on', '2026-10-06T10:00:00Z'), s('off', '2026-10-06T10:00:10Z'), s('on', '2026-10-06T10:00:20Z'),
s('off', '2026-10-06T10:00:40Z'), s('on', '2026-10-06T10:00:50Z')], 'on', '2026-10-06T10:00:00Z', '2026-10-06T10:00:50Z').length,
4);
console.log(ko ? `\n${ko} ECHEC(S)` : `\nALLERS-RETOURS OK — ${ok}/${ok}`);
process.exit(ko ? 1 : 0);