airtria: garde-fous de lecture (anti-substitution, last_changed) + ref. entites energie
Suite a une reponse WhatsApp erronee du 16/09 (question SOC VW : grandeur absente, puis grandeurs voisines servies comme reponse - 5 faux sur 6, dont un compteur fige depuis 8 h cite comme "cette nuit", et une batterie dite qui "monte" alors qu'elle descendait). Corrections de domaine fournies par EVCS. - AGENTS.md 1.7 : ne JAMAIS substituer une grandeur absente (le dire et s'arreter) ; verifier last_changed avant de citer une valeur comme actuelle ; publier une grandeur directionnelle avec le SIGNE de sa puissance. - AGENTS.md 5ter : reference "ou lire quoi" (SOC maison + sens via battery_power, source_mode, cible de nuit vivante, compteurs gx_device_* empoisonnes a ne pas lire comme des deltas ; SOC voiture = n'existe pas). - airtria-charge-session.js : lecteur SQL lecture seule (role airtria_ro, reutilise makeClient) de la session de charge en cours, pour l'energie reellement prise par la voiture (dont reseau) sans lire un compteur HA fige. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RZsbhyGmRwZogdoBwT6C6y
This commit is contained in:
33
workspace/airtria-charge-session.js
Normal file
33
workspace/airtria-charge-session.js
Normal file
@@ -0,0 +1,33 @@
|
||||
// airtria-charge-session.js — lecture seule : la session de charge EN COURS.
|
||||
// -----------------------------------------------------------------------------
|
||||
// Réutilise makeClient de concierge-detection.js (rôle airtria_ro, résolution du mot de
|
||||
// passe, PG_BASE) : aucun autre droit, un seul SELECT. Airtria l'appelle via `exec` pour
|
||||
// répondre « combien la voiture a pris cette nuit » sans SUBSTITUER un compteur HA figé
|
||||
// (cf. AGENTS.md §1.7 et §5ter). En cas d'échec : le dire, ne rien inventer.
|
||||
// SQL fourni par EVCS (16/09) ; `dont_reseau = 0` = la voiture ne coûte rien au réseau.
|
||||
// -----------------------------------------------------------------------------
|
||||
'use strict';
|
||||
const { makeClient } = require('./concierge-detection.js');
|
||||
|
||||
const SQL = `
|
||||
SELECT vehicule,
|
||||
round(energie_kwh::numeric, 2) AS kwh_session,
|
||||
round(energie_reseau_kwh::numeric, 2) AS dont_reseau,
|
||||
to_char(debut, 'HH24:MI') AS depuis,
|
||||
source_mode
|
||||
FROM session_charge
|
||||
WHERE NOT terminee
|
||||
ORDER BY debut DESC
|
||||
LIMIT 1`;
|
||||
|
||||
(async () => {
|
||||
const c = makeClient();
|
||||
await c.connect();
|
||||
try {
|
||||
const r = await c.query(SQL);
|
||||
if (!r.rows.length) { console.log('Aucune session de charge en cours.'); return; }
|
||||
const s = r.rows[0];
|
||||
console.log(`${s.vehicule} : ${s.kwh_session} kWh pris cette session ` +
|
||||
`(dont ${s.dont_reseau} kWh du réseau), depuis ${s.depuis}. Mode : ${s.source_mode}.`);
|
||||
} finally { await c.end(); }
|
||||
})().catch(e => { console.error('[charge-session]', e.message); process.exit(1); });
|
||||
Reference in New Issue
Block a user