Files
OPENCLAW_ARCHIVE3_17/workspace/airtria-charge-session.js
Thierry Tallagrand f09e2efd6e 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
2026-09-16 03:40:26 +02:00

34 lines
1.6 KiB
JavaScript

// 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); });