concierge: lire airtria_ro depuis l'env/.env + alerte d'echec d'auth
Le mot de passe airtria_ro est desormais lu depuis AIRTRIA_RO_PASSWORD (variable d'environnement, sinon .env monte dans le conteneur), plus depuis .pg-airtria : EVCS renouvelle ce mot de passe, un fichier fige faisait echouer l'auth EN SILENCE. readPgPassword LEVE (rattrapable) au lieu de process.exit ; mot de passe resolu paresseusement dans makeClient. Nouveau module concierge-health.js (meme patron que le moniteur LLM) : battement de coeur horodate a CHAQUE cycle detect, statut live dans HA, et alerte WhatsApp UNIQUEMENT sur transition ok<->erreur (dedup, pas de rappel periodique). Chemin HA independant de PostgreSQL : l'alerte auth KO part meme quand c'est l'auth qui tombe. Best-effort : si les helpers HA manquent, le concierge n'echoue pas. - concierge-health.test.js : machine a etats (dedup + transitions) verifiee, sans reseau - concierge-health-ha-package.yaml.draft : helpers HA (a integrer cote proprietaire) - SPEC : source du secret corrigee + section supervision Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RZsbhyGmRwZogdoBwT6C6y
This commit is contained in:
@@ -96,8 +96,13 @@ aucun signal. VW et JEEP sont électriquement indiscernables l'une de l'autre
|
||||
- ⚠️ NE PAS utiliser `evcs_lecture` : il a INSERT sur `evenement` (registre
|
||||
d'audit partagé) — inadapté à un agent. Rôle DÉDIÉ `airtria_ro`, LOGIN +
|
||||
SELECT sur `session_charge` et `evenement` uniquement, aucune écriture.
|
||||
Mot de passe déposé protégé dans le workspace (.pg-airtria). Base evcs sur
|
||||
10.10.10.22:5433.
|
||||
Mot de passe = variable `AIRTRIA_RO_PASSWORD`, injectée dans le conteneur par le
|
||||
`env_file: .env` du compose openclaw (secret dans /mnt/ARCH3/docker/openclaw/.env,
|
||||
600, hors git). EVCS possède le rôle et peut RENOUVELER le mot de passe : le code lit
|
||||
la variable d'environnement (source vivante), jamais un fichier figé — un `.pg-airtria`
|
||||
périmé ferait échouer l'auth en silence. Après un changement du .env, RECRÉER le
|
||||
conteneur (`docker compose up -d`) : un simple restart ne relit pas env_file. Base
|
||||
evcs sur 10.10.10.22:5433.
|
||||
- Colonnes utiles (session_charge, 17 col) : `debut` (clef, MS), `fin`,
|
||||
`terminee`, `vehicule`, `vehicule_sur` (DEFAULT true → à basculer côté service),
|
||||
`p_max_w` + `consigne_max_a` + `courant_max_a` (règle invité), `debranche_a`
|
||||
@@ -325,3 +330,30 @@ aucune connaissance métier (ni routine, ni horaire, ni puissance), et aucune
|
||||
- Prérequis à câbler : (1) accès lecture PostgreSQL pour Airtria
|
||||
(`PG_LECTURE_PASSWORD`, déposé protégé comme le token HA) ; (2) création du
|
||||
helper `input_text.airtria_vehicle_label` (max:255) dans le paquet HA.
|
||||
|
||||
## Supervision — alerte d'échec d'auth (2026-09-16)
|
||||
Motivation : le 15/09, EVCS a renouvelé le mot de passe `airtria_ro` ; le concierge a
|
||||
alors échoué à se connecter, mais EN SILENCE — sortie vide, donc aucun WhatsApp émis,
|
||||
aucune trace visible : il cessait simplement de poser la question sans que personne le
|
||||
sache. Même angle mort que le service EVCS (une trace écrite seulement AU RETOUR à la
|
||||
normale, dans PG, donc jamais quand c'est PG qui tombe).
|
||||
|
||||
Correctif (module `concierge-health.js`, même patron que le moniteur LLM) :
|
||||
- **Battement de cœur À CHAQUE cycle** : `input_datetime.concierge_last_run` reçoit un
|
||||
horodatage (valeur qui CHANGE — HA ne rafraîchit pas le `last_changed` d'un helper
|
||||
réécrit à l'identique). Un concierge mort devient détectable (capteur `binary_sensor`
|
||||
de fraîcheur, > 20 min → « figé »).
|
||||
- **Statut live** : `input_text.concierge_status` (max:255) = `OK · HH:MM` ou
|
||||
`⚠️ <erreur> · HH:MM`.
|
||||
- **Alerte WhatsApp UNIQUEMENT sur transition** (ok↔erreur), jamais un rappel périodique
|
||||
(« events not states ») : une panne qui dure ne spamme pas le canal. Dédup par état
|
||||
local `concierge-health-state.json`.
|
||||
- **Chemin HA indépendant de PostgreSQL** : l'alerte « auth KO » part précisément quand
|
||||
c'est l'auth qui tombe (le signal de vie n'emprunte pas le chemin qui tombe). Best-effort :
|
||||
si les helpers manquent, le concierge n'échoue pas ; l'alerte WhatsApp part quand même
|
||||
(elle ne dépend pas des helpers). Interrupteur `input_boolean.concierge_monitor_enabled`
|
||||
(OFF = pas de WhatsApp, affichage maintenu).
|
||||
- Refactor de `concierge-detection.js` : `readPgPassword()` LÈVE au lieu de `process.exit`,
|
||||
mot de passe résolu paresseusement dans `makeClient()` → l'échec devient RATTRAPABLE par
|
||||
l'étage live, qui le publie. Paquet HA : `concierge-health-ha-package.yaml.draft`.
|
||||
Machine à états vérifiée par `concierge-health.test.js` (dédup + transitions, sans réseau).
|
||||
|
||||
Reference in New Issue
Block a user