Plan du planificateur HC ; dialogue avec le conseiller dans HA ; arbitre encadre (question a choix fermes, liste blanche)
This commit is contained in:
@@ -270,9 +270,57 @@ views:
|
||||
<small>Tout est gardé en base (`revue_constat`, `revue_piste`, avec les pistes écartées et leur motif) pour rejouer le conseiller plus tard et mesurer s'il progresse.</small>
|
||||
|
||||
- type: markdown
|
||||
title: Dialoguer avec le conseiller
|
||||
title: ⚖️ Arbitrage (cas non prévus par les règles)
|
||||
content: |
|
||||
Pour l'instant, le dialogue passe par **OpenClaw** (WhatsApp ou vocal) : « qu'est-ce qui a cloché hier ? » — il lit la revue et les pistes ci-dessus, et présente les pistes comme des avis.
|
||||
{% set a = states.sensor.evcs_arbitrage %}
|
||||
{% if a is none or a.state == 'aucun' %}
|
||||
Aucune question en attente.{% if a is not none and a.attributes.dernier_cas %} Dernier arbitrage : {{ a.attributes.dernier_cas }} ({{ a.attributes.derniere_issue }}).{% endif %}
|
||||
{% else %}
|
||||
{% if a.state == 'question' %}❓ **Question envoyée par WhatsApp**{% else %}✅ **Réponse reçue**{% endif %} (depuis {{ as_timestamp(a.attributes.depuis) | timestamp_custom('%H:%M') if a.attributes.depuis else '?' }})
|
||||
|
||||
{{ a.attributes.question }}
|
||||
|
||||
{% for c in a.attributes.choix | default([]) %}
|
||||
**{{ c.cle }}.** {{ c.libelle }}<br>
|
||||
{% endfor %}
|
||||
{% if a.state == 'repondu' %}
|
||||
Réponse : **{{ a.attributes.reponse }}** → {{ a.attributes.application }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<small>Le code détecte la situation et propose des choix fermés ; seul l'ordre du choix retenu est appliqué (liste blanche). Appliquer : {{ states('input_boolean.evcs_arbitrage_enabled') }}.</small>
|
||||
- type: entities
|
||||
entities:
|
||||
- entity: input_boolean.evcs_arbitrage_enabled
|
||||
name: Arbitrage — appliquer ma réponse
|
||||
|
||||
- type: entities
|
||||
title: 💬 Poser une question au conseiller
|
||||
entities:
|
||||
- entity: input_text.evcs_conseiller_question
|
||||
name: Ta question (Entrée pour envoyer)
|
||||
- type: markdown
|
||||
content: |
|
||||
{% set r = states.sensor.evcs_conseiller_reponse %}
|
||||
{% set q = states('input_text.evcs_conseiller_question') %}
|
||||
{% if r is none %}
|
||||
Pas encore de réponse. Écris une question ci-dessus : le conseiller répond en une à deux minutes (il lit l'état du système, la revue du jour et ses pistes).
|
||||
{% else %}
|
||||
{% set en_attente = (as_timestamp(states.input_text.evcs_conseiller_question.last_changed) | int(0)) > (r.attributes.question_at | int(0)) %}
|
||||
{% if en_attente %}⏳ **Question en cours de traitement…** (« {{ q }} »)
|
||||
|
||||
---
|
||||
{% endif %}
|
||||
**Question** ({{ r.state }}) : _{{ r.attributes.question }}_
|
||||
|
||||
{% if r.attributes.avertissement %}⚠️ **{{ r.attributes.avertissement }}**
|
||||
|
||||
{% endif %}
|
||||
{{ r.attributes.reponse }}
|
||||
|
||||
<small>{% if r.attributes.source == 'openrouter' %}☁️ Réponse d'**OpenRouter** (cloud, secours : la Spark n'a pas répondu){% else %}🏠 Réponse du modèle local de la **Spark** ({{ r.attributes.modele }}){% endif %} · le conseiller explique, il ne commande rien.</small>
|
||||
{% endif %}
|
||||
<small>Aussi par **OpenClaw** (WhatsApp ou vocal) : « qu'est-ce qui a cloché hier ? »</small>
|
||||
|
||||
- type: entities
|
||||
entities:
|
||||
|
||||
Reference in New Issue
Block a user