Les tensions de cellule entrent dans la base, avec leur decalage d'horloge
Nouvelle table cellule, indexee par CODE-BARRES et non par adresse : chaque chaine renumerote ses modules a partir de 1, il existe donc deux « module 1 » dans ce parc. L'importeur lit les exports d'historique et les CSV de suivi. Deux pieges corriges en le construisant : le tampon du BMS est circulaire, donc le plus grand index n'est pas le plus recent - trier par index donnait un decalage deduit de -865 h ; et les fichiers d'evenements portent les memes colonnes sans decrire un echantillonnage regulier, ils sont ecartes. La deduction du decalage d'horloge reste approximative : sur BAT3 elle donne huit heures la ou le chronometre en donne six. La console inscrit desormais le decalage en tete de chaque export, mesure a la seconde ou il commence ; l'importeur le prefere toujours a sa propre deduction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKzkkVTG6KXnGXFFC7X9XJ
This commit is contained in:
@@ -363,6 +363,28 @@ async function migrer(client) {
|
||||
'ALTER TABLE session_charge ADD COLUMN IF NOT EXISTS energie_station_kwh double precision');
|
||||
await client.query(
|
||||
'CREATE INDEX IF NOT EXISTS session_charge_debut_idx ON session_charge (debut DESC)');
|
||||
|
||||
// Tensions cellule par cellule des modules Pylontech. La source est la
|
||||
// console serie du BMS, pas Home Assistant : aucune de ces valeurs n'est
|
||||
// publiee cote Victron, qui n'expose que l'agregat du parc.
|
||||
//
|
||||
// L'identite d'un module est son CODE-BARRES, jamais son adresse : chaque
|
||||
// chaine renumerote ses modules a partir de 1, donc il existe deux
|
||||
// « module 1 » dans ce parc.
|
||||
await client.query(`
|
||||
CREATE TABLE IF NOT EXISTS cellule (
|
||||
ts timestamptz NOT NULL,
|
||||
module text NOT NULL,
|
||||
cellule smallint NOT NULL,
|
||||
mv integer NOT NULL,
|
||||
soc smallint,
|
||||
courant_ma integer,
|
||||
etat text,
|
||||
source text NOT NULL,
|
||||
PRIMARY KEY (ts, module, cellule)
|
||||
)`);
|
||||
await client.query(
|
||||
'CREATE INDEX IF NOT EXISTS cellule_module_ts_idx ON cellule (module, ts DESC)');
|
||||
// Le role de lecture doit voir la nouvelle table. S'il n'existe pas encore,
|
||||
// on ne fait pas echouer le demarrage pour autant.
|
||||
await client.query(`DO $$ BEGIN
|
||||
|
||||
Reference in New Issue
Block a user