workspace: rapport solaire, prevision de nuit, concierge, courrier, fiche allegee

- Fiche agent maison (AGENTS.md) : prevision de nuit relayee par script, import
  EDF, regle JEEP midi, saisie vehicule/niveau/depart, concierge qui relaie
  « ✅ Noté » ou « Rien n'est noté », groupe A deplace (28 649 -> 25 831 car.).
- Nouvelles references : reference-concierge.md, reference-workspace.md.
- Scripts : rapport-solaire.js, prevision-nuit.js, airtria-ha-vehicule.js,
  concierge-live.js (answer ne sort plus jamais vide, mode CONCIERGE_SIMULATION).
- Courrier Orange / AIRTRIA / Gmail : audits, regles, menage, recents.
- Bancs EVCS tests-pv (G5 accepte « anomal »).
- .gitignore : liste blanche etendue aux nouveaux scripts et bancs.
This commit is contained in:
2026-09-30 11:32:44 +02:00
parent 973a736bc2
commit f121f0a196
37 changed files with 4030 additions and 328 deletions

View File

@@ -223,17 +223,39 @@ aucun signal. VW et JEEP sont électriquement indiscernables l'une de l'autre
Le vidage ouvrirait une fenêtre de perte si le service est arrêté entre publication
et vidage.
## Le sélecteur temps réel (ajout du 19/09/2026, demande du propriétaire via EVCS)
Répondre WhatsApp ne suffisait pas : le sélecteur `input_select.victron_evcs_vehicle`
pilote l'heure de départ (VW 08:50 / JEEP 06:30), donc la priorité et l'urgence de
recharge de nuit, et il restait à changer À LA MAIN (vécu le 19/09 : VW branchée
11:01, sélecteur resté sur JEEP). Désormais, sur confirmation HUMAINE :
- `setVehicleSelector(label, source)` dans concierge-write.js écrit AUSSI le
sélecteur, via `input_select.select_option`, PUIS relit l'état — HA IGNORE en
silence une option hors liste, la relecture est le seul détecteur.
- Options valides EXACTEMENT `VW` et `JEEP` (casse comprise), liste EN DUR dans le
code, volontairement PAS lue depuis HA : y ajouter une valeur est une décision,
pas un effet de bord d'un changement côté HA.
- MEGANE / INVITE / ZERO : on N'ÉCRIT PAS le sélecteur (il ne désigne que les deux
véhicules du foyer) ; l'étiquette seule est publiée, le sélecteur reste tel quel.
- Source HUMAINE uniquement (`whatsapp`) : la déduction règle-puissance ne conclut
jamais VW vs JEEP et ne doit JAMAIS écrire le sélecteur — le garde est dans la
fonction, pas seulement chez l'appelant.
- Si l'écriture du sélecteur échoue APRÈS la publication de l'étiquette, la réponse
WhatsApp le dit (« pense à le passer sur X à la main ») au lieu d'échouer :
l'étiquette publiée ne doit pas être perdue pour un sélecteur.
## Garde-fous d'écriture (non négociables — restriction CONVENTIONNELLE)
Le canal choisi est un token HA, qui peut techniquement écrire n'importe quel
service HA : la restriction à airtria_* ne tient QUE par la discipline du code.
service HA : la restriction ne tient QUE par la discipline du code.
Donc, côté OpenClaw :
- Le nom de l'entité écrite est une CONSTANTE EN DUR unique
(`input_text.airtria_vehicle_label`), jamais construite dynamiquement, jamais
interpolée.
- Un test type « mode ombre » ÉCHOUE si une écriture cible autre chose que cette
constante (équivalent du tests/advisor/run.mjs d'EVCS qui garde advisor_*).
- Aucune écriture d'actionneur, jamais (liste des variables à propriétaire unique
dans le MANUEL EVCS ; `carte-decisions.mjs` / `enquete.mjs` avant tout doute).
- Les noms des entités écrites sont DEUX CONSTANTES EN DUR
(`input_text.airtria_vehicle_label` et `input_select.victron_evcs_vehicle`),
jamais construites dynamiquement, jamais interpolées. Pas une de plus.
- concierge-write.test.js ÉCHOUE si une écriture cible autre chose que ces deux
constantes, si un service autre que set_value/select_option apparaît, si le
sélecteur accepte un label hors foyer ou une source non humaine, ou si une
relecture manque (équivalent du tests/advisor/run.mjs d'EVCS qui garde advisor_*).
- Aucune autre écriture d'actionneur, jamais (liste des variables à propriétaire
unique dans le MANUEL EVCS ; `carte-decisions.mjs` / `enquete.mjs` avant tout doute).
## Recoupement a posteriori (qualité de données)
- Comparer `session_charge.debranche_a` aux départs attendus :