Files
OPENCLAW_ARCHIVE3_17/workspace/concierge-health-ha-package.yaml.draft
Thierry Tallagrand 6da250914d 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
2026-09-16 03:26:50 +02:00

65 lines
2.7 KiB
Plaintext

# concierge-health-ha-package.yaml.draft
# ----------------------------------------------------------------------------
# Paquet Home Assistant pour la SANTÉ du concierge véhicule (alerte d'échec d'auth).
# À intégrer par le PROPRIÉTAIRE (la config HA lui appartient) : copier le contenu dans
# un package (config/packages/) ou dans la config existante, vérifier, puis recharger
# les helpers concernés (ou redémarrer HA).
#
# Ces entités sont best-effort côté concierge : s'il manque, il n'échoue pas — mais tant
# qu'elles n'existent pas, l'affichage et le battement de cœur ne s'affichent pas dans HA.
#
# ⚠️ max: 255 est OBLIGATOIRE sur input_text : le défaut est 100 et un libellé plus long
# est rejeté EN SILENCE (même piège que le helper airtria_vehicle_label).
# ----------------------------------------------------------------------------
input_boolean:
concierge_monitor_enabled:
name: Concierge — alertes activées
icon: mdi:bell-ring
input_text:
concierge_status:
name: Concierge — état
max: 255
icon: mdi:car-electric
input_datetime:
concierge_last_run:
name: Concierge — dernier passage
has_date: true
has_time: true
icon: mdi:heart-pulse
# --- Optionnel mais recommandé : capteur de FRAÎCHEUR du battement de cœur --------------
# Le battement de cœur ne sert que si quelque chose le SURVEILLE. Ce capteur passe à
# "problem" si le concierge n'a pas écrit depuis > 20 min (le cron tourne toutes les
# quelques minutes) — il rend visible un concierge mort AVANT même d'avoir pu écrire un
# statut (conteneur tombé, cron arrêté). C'est le « HA crie quand le service se tait ».
template:
- binary_sensor:
- name: Concierge figé
unique_id: concierge_heartbeat_stale
device_class: problem
state: >
{% set t = states('input_datetime.concierge_last_run') %}
{% if t in ['unknown', 'unavailable', ''] %} off
{% else %} {{ (as_timestamp(now()) - as_timestamp(t)) > 1200 }}
{% endif %}
# --- Optionnel : notifier quand figé (adapter le service notify.* et l'entity_id) ------
# automation:
# - alias: Concierge figé -> notifier
# trigger:
# - platform: state
# entity_id: binary_sensor.concierge_fige # vérifier l'entity_id réel généré
# to: "on"
# for: { minutes: 5 }
# condition:
# - condition: state
# entity_id: input_boolean.concierge_monitor_enabled
# state: "on"
# action:
# - service: notify.whatsapp # <- adapter à ton service
# data:
# message: "⚠️ Concierge véhicule figé : plus de passage depuis > 20 min."