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
65 lines
2.7 KiB
Plaintext
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."
|