# 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é.