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:
64
workspace/concierge-health-ha-package.yaml.draft
Normal file
64
workspace/concierge-health-ha-package.yaml.draft
Normal file
@@ -0,0 +1,64 @@
|
||||
# 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."
|
||||
Reference in New Issue
Block a user