Files
pilot/gnome-pilot-extension/RESUME_PROJET.md
2026-01-10 20:24:11 +01:00

12 KiB

Résumé du Projet - Extension Pilot Control

🎯 Objectif

Créer une extension GNOME Shell simple pour piloter l'application Pilot V2 (agent MQTT pour Home Assistant) directement depuis le bureau GNOME, sans avoir à éditer manuellement le fichier config.yaml.

Fonctionnalités implémentées (V1)

1. Contrôle du service systemd

  • Démarrer/Arrêter le service mqtt_pilot.service
  • Redémarrer le service (pour appliquer les changements)
  • Activer/Désactiver le démarrage automatique
  • Affichage du statut en temps réel (Running/Stopped)

2. Gestion de la télémétrie

  • Switch global pour activer/désactiver toute la télémétrie
  • Liste des métriques disponibles (CPU, Memory, Battery, etc.)
  • Switch individuel pour chaque métrique
  • Dialogue d'édition pour modifier :
    • Enabled (activé/désactivé)
    • Display Name (nom affiché)
    • Unique ID (identifiant unique)
    • Update Interval (intervalle en secondes)

3. Gestion des commandes

  • Switch global pour activer/désactiver les commandes
  • Éditeur de la allowlist (liste des commandes autorisées)
  • Sélection des commandes : shutdown, reboot, sleep, hibernate, screen
  • Descriptions des commandes pour chaque action

4. Interface utilisateur

  • Icône dans le panel GNOME (top bar)
  • Menu déroulant avec actions rapides
  • Fenêtre principale avec 3 sections (Services, Telemetry, Commands)
  • Interface moderne avec GTK4 + Libadwaita
  • Boutons Refresh et Save dans le header

5. Gestion de la configuration

  • Lecture du fichier config.yaml (parser YAML simple)
  • Écriture des modifications dans le fichier
  • Création automatique de backups (config.yaml.backup_timestamp)
  • Rechargement automatique du service après sauvegarde

📁 Fichiers créés

gnome-pilot-extension/
├── metadata.json              (140 lignes)
├── extension.js              (150 lignes)
├── prefs.js                  (80 lignes)
├── yamlConfig.js            (290 lignes)
├── serviceManager.js        (150 lignes)
├── stylesheet.css           (20 lignes)
├── ui/
│   ├── pilotWindow.js       (400 lignes)
│   ├── metricEditDialog.js  (130 lignes)
│   └── commandEditDialog.js (140 lignes)
├── install.sh               (100 lignes)
├── README.md                (350 lignes)
├── GUIDE_DEBUTANT.md       (600 lignes)
├── STRUCTURE.md            (400 lignes)
└── RESUME_PROJET.md        (ce fichier)

Total: ~2950 lignes de code et documentation

🛠️ Technologies utilisées

  • GJS : JavaScript runtime pour GNOME
  • GTK4 : Toolkit d'interface graphique
  • Libadwaita : Composants UI modernes GNOME
  • GLib/Gio : Utilitaires système (fichiers, processus)
  • GNOME Shell 45+ : API d'extension

🚀 Installation

Méthode rapide (recommandée)

cd /home/gilles/app/pilot/gnome-pilot-extension
./install.sh

Méthode manuelle

# Copier l'extension
mkdir -p ~/.local/share/gnome-shell/extensions/pilot-control@gnome-shell-extensions
cp -r /home/gilles/app/pilot/gnome-pilot-extension/* \
  ~/.local/share/gnome-shell/extensions/pilot-control@gnome-shell-extensions/

# Activer l'extension
gnome-extensions enable pilot-control@gnome-shell-extensions

# Redémarrer GNOME Shell (X11: Alt+F2, 'r' | Wayland: logout/login)

📖 Documentation

Fichier Description
README.md Documentation complète (fonctionnalités, installation, usage)
GUIDE_DEBUTANT.md Guide détaillé pour comprendre le code (débutants)
STRUCTURE.md Architecture, diagrammes, flux de données
RESUME_PROJET.md Ce fichier (vue d'ensemble du projet)

🎨 Captures d'écran conceptuelles

Panel menu

┌─────────────────────────┐
│ [Icon] Pilot Control ▼  │
│  ├─ Status: 🟢 Running  │
│  ├─ Start Service       │
│  ├─ Stop Service        │
│  ├─ Restart Service     │
│  ├─ Open Control Panel  │
│  └─ Reload Config       │
└─────────────────────────┘

Fenêtre principale

┌──────────────────────────────────────┐
│  Pilot Control Panel    [↻] [💾]    │
├──────────────────────────────────────┤
│ ┌─ Service Control ────────────────┐ │
│ │ Service Status     [Switch ON]  │ │
│ │ Auto-start         [Switch ON]  │ │
│ │ Restart Service    [Button]     │ │
│ └──────────────────────────────────┘ │
│                                      │
│ ┌─ Telemetry Metrics ──────────────┐ │
│ │ Enable Telemetry  [Switch ON]   │ │
│ │                                  │ │
│ │ CPU Usage     [ON]  [Edit...]   │ │
│ │ Memory        [ON]  [Edit...]   │ │
│ │ Battery       [ON]  [Edit...]   │ │
│ └──────────────────────────────────┘ │
│                                      │
│ ┌─ Commands ───────────────────────┐ │
│ │ Enable Commands  [Switch ON]    │ │
│ │ Allowed Commands [Edit...]      │ │
│ └──────────────────────────────────┘ │
└──────────────────────────────────────┘

🔄 Workflow d'utilisation

Scénario 1 : Activer/désactiver une métrique

  1. Cliquer sur l'icône dans le panel
  2. Cliquer sur "Open Control Panel"
  3. Dans la section "Telemetry Metrics", utiliser le switch de la métrique
  4. Cliquer sur [💾] Save
  5. Le service redémarre automatiquement
  6. La métrique est activée/désactivée dans Pilot V2

Scénario 2 : Modifier l'intervalle d'une métrique

  1. Ouvrir le Control Panel
  2. Cliquer sur [Edit...] à côté de la métrique
  3. Modifier "Update Interval (seconds)"
  4. Cliquer "Save"
  5. Fermer le dialogue
  6. Cliquer sur [💾] Save dans la fenêtre principale
  7. Le service redémarre et applique le nouvel intervalle

Scénario 3 : Gérer la allowlist des commandes

  1. Ouvrir le Control Panel
  2. Dans "Commands", cliquer sur "Allowed Commands"
  3. Cocher/décocher les commandes souhaitées
  4. Cliquer "Save"
  5. Cliquer sur [💾] Save dans la fenêtre principale
  6. Le service redémarre avec la nouvelle allowlist

Scénario 4 : Redémarrer le service rapidement

Option 1 (menu rapide) :

  1. Cliquer sur l'icône dans le panel
  2. Cliquer sur "Restart Service"

Option 2 (fenêtre complète) :

  1. Ouvrir le Control Panel
  2. Dans "Service Control", cliquer sur "Restart"

🔐 Sécurité

Bonnes pratiques implémentées

  1. Backups automatiques : Chaque modification crée une sauvegarde
  2. Service utilisateur uniquement : Utilise systemctl --user (pas de sudo)
  3. Validation basique : Vérification des entrées utilisateur
  4. Warnings : Avertissements pour les commandes système critiques

Limites de sécurité

  • L'extension peut modifier le config.yaml de l'utilisateur
  • L'extension peut contrôler le service systemd de l'utilisateur
  • Pas de validation avancée des commandes (V1)

📊 Statistiques du projet

  • Fichiers JavaScript : 8 fichiers
  • Lignes de code : ~1500 lignes
  • Lignes de documentation : ~1450 lignes
  • Ratio doc/code : ~1:1 (excellent pour un projet pédagogique)
  • Temps de développement estimé : 6-8 heures pour un développeur expérimenté

🧪 Tests recommandés

Tests de base

  1. Installation de l'extension
  2. Activation de l'extension
  3. Apparition de l'icône dans le panel
  4. Ouverture du menu déroulant
  5. Ouverture de la fenêtre principale

Tests fonctionnels

  1. Lecture du config.yaml
  2. Affichage des métriques existantes
  3. Modification d'une métrique
  4. Sauvegarde du config.yaml
  5. Création du backup
  6. Redémarrage du service

Tests de contrôle du service

  1. Vérification du statut
  2. Démarrage du service
  3. Arrêt du service
  4. Redémarrage du service

Commandes de test

# Test 1: Vérifier que l'extension est installée
gnome-extensions list | grep pilot

# Test 2: Vérifier le config.yaml
cat ~/app/pilot/pilot-v2/config.yaml

# Test 3: Vérifier les backups créés
ls -lh ~/app/pilot/pilot-v2/config.yaml.backup_*

# Test 4: Vérifier le statut du service
systemctl --user status mqtt_pilot.service

# Test 5: Voir les logs de l'extension
journalctl -f -o cat /usr/bin/gnome-shell | grep -i pilot

🐛 Problèmes connus et solutions

Problème 1 : Extension ne se charge pas

Symptômes : L'icône n'apparaît pas dans le panel

Solutions :

  1. Vérifier que GNOME Shell >= 45
  2. Vérifier les logs : journalctl -f -o cat /usr/bin/gnome-shell
  3. Redémarrer GNOME Shell
  4. Réinstaller l'extension

Problème 2 : Config.yaml non trouvé

Symptômes : Erreur "Failed to load configuration"

Solutions :

  1. Vérifier le chemin dans yamlConfig.js:_findConfigPath()
  2. Créer le fichier manuellement
  3. Modifier les permissions : chmod 644 config.yaml

Problème 3 : Service ne redémarre pas

Symptômes : Les modifications ne sont pas appliquées

Solutions :

  1. Vérifier que le service existe : systemctl --user list-units | grep mqtt_pilot
  2. Redémarrer manuellement : systemctl --user restart mqtt_pilot.service
  3. Vérifier les logs : journalctl --user -u mqtt_pilot.service

🎓 Points d'apprentissage

Ce projet permet d'apprendre :

  1. Architecture GNOME Extensions : Structure, métadonnées, cycle de vie
  2. GTK4 + Libadwaita : Composants UI modernes
  3. GJS : JavaScript pour GNOME (imports, GObject)
  4. Gestion de fichiers : Lecture/écriture avec Gio
  5. Interaction avec systemd : Commandes systemctl
  6. Parser YAML : Implémentation d'un parser simple
  7. Patterns UI : Dialogues, switches, action rows

🚧 Améliorations possibles (V2+)

Fonctionnalités

  • Support de plusieurs instances de Pilot
  • Visualisation des logs en temps réel
  • Notifications pour les événements (service stopped, etc.)
  • Graphiques de métriques (historique)
  • Export/import de configurations
  • Validation avancée des entrées (regex, ranges)

Technique

  • Parser YAML complet (librairie externe ?)
  • Support des configurations complexes
  • Validation des entrées utilisateur
  • Tests automatisés (unit tests)
  • CI/CD pour les releases
  • Support de GSettings pour les préférences

UI/UX

  • Thèmes sombres/clairs personnalisés
  • Animations et transitions
  • Tooltips explicatifs
  • Raccourcis clavier
  • Drag & drop pour réordonner les métriques

📝 Conclusion

Objectifs atteints

Extension fonctionnelle pour contrôler Pilot V2 depuis GNOME Shell Interface intuitive avec GTK4/Libadwaita Code commenté pour débutants Documentation complète (README, Guide, Structure) Installation simple (script automatique) Sauvegarde automatique des configurations Rechargement du service après modification

Utilisation recommandée

Cette extension est parfaite pour :

  • Les utilisateurs de Pilot V2 sur GNOME
  • Éviter l'édition manuelle du config.yaml
  • Contrôler rapidement le service systemd
  • Activer/désactiver des fonctionnalités à la volée

Prochaines étapes

  1. Tester l'extension : Installer et utiliser
  2. Rapporter les bugs : Créer des issues si nécessaire
  3. Proposer des améliorations : Pull requests bienvenues
  4. Partager : Publier sur extensions.gnome.org (optionnel)

Développé pour Pilot V2 Compatible GNOME Shell 45+ Version 1.0 - Décembre 2025