83 lines
7.1 KiB
Markdown
83 lines
7.1 KiB
Markdown
# Alfred — Vues dynamiques & Calendrier Home Assistant (V1)
|
||
|
||
Base : votre **alfredapp.zip** du 25 octobre 2026. Aucun avatar n’est ajouté. Les fonctions Vosk, Hermes, Wyoming Piper, caméra locale, contrôles audio et ComfyUI sont conservées.
|
||
|
||
## Installation : patch (conseillé)
|
||
|
||
1. Sauvegarder **/opt/alfred/app**. Le ZIP de mise à jour ne contient que les fichiers ajoutés/modifiés, sous `app/`.
|
||
2. Décompresser `Alfred_Calendrier_HA_V1_PATCH.zip` sous **/opt/alfred/** (pas sous `/opt/alfred/app`, sinon vous obtiendrez `app/app`).
|
||
3. Activer votre environnement Python habituel et installer les dépendances si nécessaire :
|
||
|
||
```bash
|
||
sudo systemctl stop alfred
|
||
sudo cp -a /opt/alfred/app /opt/alfred/app.sauvegarde.$(date +%Y%m%d_%H%M%S)
|
||
sudo unzip -o /tmp/Alfred_Calendrier_HA_V1_PATCH.zip -d /opt/alfred
|
||
cd /opt/alfred/app
|
||
# Utiliser le pip du venv exécutant app.py :
|
||
/path/vers/venv/bin/python -m pip install requests websocket-client
|
||
/path/vers/venv/bin/python -m py_compile app.py services/ha_views.py services/alfred_intents.py services/alfred_views_controller.py
|
||
```
|
||
|
||
Le script de démarrage systemd existant n’est **pas modifié**.
|
||
|
||
## Variables d’environnement à fournir à `alfred.service`
|
||
|
||
```ini
|
||
HA_URL=http://192.168.1.XXX:8123
|
||
HA_TOKEN=JETON_LONGUE_DUREE_HOME_ASSISTANT
|
||
ALFRED_TIMEZONE=Europe/Paris
|
||
# Limiter aux calendriers choisis (laisser absent pour lire tous les calendriers autorisés au jeton) :
|
||
# HA_CALENDARS=calendar.famille,calendar.alfred
|
||
# Permet de cibler un calendrier pour les créations vocales :
|
||
# HA_DEFAULT_CALENDAR=calendar.alfred
|
||
# Pour restreindre les caméras visibles (ex. uniquement les caméras extérieures) :
|
||
# HA_CAMERAS=camera.entree,camera.jardin
|
||
# L'écriture est OFF par sécurité ; l'activer après validation de la lecture :
|
||
ALFRED_ALLOW_CALENDAR_WRITES=true
|
||
```
|
||
|
||
Mettre ces valeurs **dans l’environnement du service** (par exemple un fichier `EnvironmentFile=` de systemd ou fichier `.env` effectivement chargé par `/opt/alfred/app/app.py`). **Ne pas mettre le jeton dans le navigateur ni dans le ZIP.** Si l’application utilise `load_dotenv()`, un fichier `.env` dans son répertoire de travail peut convenir, mais vérifiez `systemctl cat alfred` avant de choisir son emplacement.
|
||
|
||
Après modification des paramètres systemd : `sudo systemctl daemon-reload`. Puis `sudo systemctl start alfred` et `sudo journalctl -u alfred -f`.
|
||
|
||
L’utilisateur associé à HA_TOKEN doit avoir des droits lecture sur les calendriers voulus et des droits écriture sur ceux à modifier. Les calendriers Google ou externes en lecture seule ne permettront pas l’écriture. Certains calendriers n’acceptent pas la suppression.
|
||
|
||
## Tests initiaux
|
||
|
||
1. Ouvrir `http://IP_ALFRED:54321/`. Appuyer sur l'icône **Agenda**.
|
||
2. Tester `http://IP_ALFRED:54321/api/calendar/calendars` puis `http://IP_ALFRED:54321/api/calendar/events` depuis une session réseau de confiance.
|
||
3. Dire « Alfred, montre-moi mon planning sur sept jours » puis « Et demain ? ».
|
||
4. Faire un événement de test via le bouton **+ Rendez-vous** dans un calendrier HA disposant de l'option création.
|
||
5. Depuis la grille, ouvrir cet événement, demander sa suppression, puis confirmer la boîte de dialogue ; vérifier l'événement dans HA.
|
||
|
||
**Commandes prises en charge** : « mon agenda aujourd'hui », « demain », « ce matin », « cet après-midi », « ce soir », « dans la journée », « le 8 novembre », « sur 3 jours », « sur 7 jours », « cette semaine », « la semaine prochaine », « ce mois », « ai-je des choses prévues demain ? », « ajoute un rendez-vous dentiste demain à 15 h dans le calendrier Famille », « supprime mon rendez-vous dentiste demain », « confirme » / « annule », « montre les températures », « affiche les caméras », « reviens à l'accueil ».
|
||
|
||
### Écriture vocale et sécurité
|
||
|
||
- Pour une création entièrement spécifiée (date, heure, calendrier, titre), Alfred propose l'événement et **attend « confirme »** avant d'enregistrer. Si des éléments manquent, il affiche un formulaire prérempli ; il ne devine pas le calendrier ou l'heure.
|
||
- Pour une suppression, Alfred recherche l'événement par nom/période, exige un identifiant HA `uid` et une **confirmation explicite**. Si plusieurs événements correspondent, l'écran permet de choisir. Une confirmation vocale expire après 90 secondes ; elle n'est pas sauvegardée après redémarrage. Pour une série récurrente sans `recurrence_id`, la suppression peut affecter toute la série ; la boîte de dialogue l'indique.
|
||
- `ALFRED_ALLOW_CALENDAR_WRITES` désactive la création/suppression par défaut ; l'activer seulement sur un réseau de confiance et un utilisateur Home Assistant aux droits restreints. **Cette application ne fournit pas d'authentification utilisateur complète** : ne pas exposer Flask à Internet ni à un réseau non fiable. Les événements contiennent des données personnelles.
|
||
- La création utilise `POST /api/services/calendar/create_event`. La suppression utilise la commande HA WebSocket `calendar/event/delete`, **pas** un service REST inexistant.
|
||
|
||
### Vue capteurs et caméras
|
||
|
||
- Les températures sont les entités HA `sensor` ayant `device_class: temperature`, plus les températures courantes des entités `climate`. Le clic ouvre un graphique des dernières 24 h (si l'API d'historique HA fournit des points).
|
||
- La vue Caméras Home Assistant affiche des **instantanés** sécurisés derrière Flask, rafraîchis toutes les 15 s et seulement quand la vue est ouverte. Ce n'est pas un flux vidéo WebRTC/RTSP. La petite prévisualisation de la webcam locale existante reste inchangée.
|
||
- Le bouton Accueil ou la commande vocale rétablit la page d'accueil.
|
||
|
||
### Remarques sur le contexte Hermes
|
||
|
||
Ce patch **ne modifie pas `hermes_client.py`, `identity.md`, les sessions Hermes ou le MCP Home Assistant**. Les commandes visuelles explicites sont détectées côté Flask ; les autres demandes continuent vers Hermes et ses MCP, pour éviter de réintroduire la limitation du contexte qui avait empêché la génération ComfyUI.
|
||
|
||
### Limites connues
|
||
|
||
- L'interprétation vocale des dates suit un jeu de règles françaises (aujourd'hui/demain/jour de la semaine/jour et mois). Une formulation très libre peut nécessiter le formulaire tactile ou Hermes ; le routeur ne doit pas improviser une écriture.
|
||
- La couleur des événements suit la liste des calendriers ; elle n'est pas encore configurable.
|
||
- Certains calendriers de HA ne transmettent pas `uid` ou sont en lecture seule : leurs événements restent consultables, mais ne peuvent pas être supprimés dans Alfred.
|
||
- Les appels HA ne sont pas testables depuis ce fichier d'installation sans accès à votre serveur/token ; les validations automatiques portent sur la syntaxe, le routage vocal et des réponses HA simulées.
|
||
- Les requêtes de lecture et de mutation sont faites directement de Flask vers Home Assistant, **sans dupliquer les calendriers**. C'est un adaptateur de source, réutilisable pour d'autres fournisseurs plus tard.
|
||
|
||
## Restauration
|
||
|
||
Arrêter Alfred puis restaurer le dossier sauvegardé. Ne pas copier `identity.md` d'anciennes archives si vous l'aviez volontairement désactivé.
|