Skip to content

System Module

Le module System est intégré au coeur d'Espilon et fournit les commandes essentielles pour la gestion et le monitoring des devices.

Toujours Actif

Ce module est automatiquement inclus dans tous les builds. Aucune configuration requise.


Vue d'Ensemble

┌──────────────────────────────────────────────────────────┐
│                    SYSTEM MODULE                          │
├──────────────────────────────────────────────────────────┤
│                                                           │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────┐   │
│  │ system_info │  │ system_mem  │  │ system_uptime   │   │
│  │             │  │             │  │                 │   │
│  │ - Chip info │  │ - Heap free │  │ - Seconds       │   │
│  │ - Cores     │  │ - Heap min  │  │ - Days/Hours    │   │
│  │ - Flash     │  │ - Internal  │  │ - Minutes/Secs  │   │
│  │ - Modules   │  │   SRAM      │  │                 │   │
│  └─────────────┘  └─────────────┘  └─────────────────┘   │
│                                                           │
│  ┌─────────────────────────────────────────────────────┐ │
│  │                   system_reboot                      │ │
│  │                                                      │ │
│  │  Redémarrage contrôlé avec délai de sécurité        │ │
│  └─────────────────────────────────────────────────────┘ │
│                                                           │
└──────────────────────────────────────────────────────────┘

Commandes

system_info

Récupère les informations détaillées sur le hardware et les modules actifs.

Syntaxe:

c2:> send <device_id> system_info

Réponse:

chip=esp32s3 cores=2 flash=external heap=245760 uptime=3600s modules=network,fakeap,camera

Champs retournés:

Champ Type Description
chip string Type de chip (esp32, esp32s3, esp32c3...)
cores int Nombre de coeurs CPU
flash string Type de flash (embedded/external)
heap int Mémoire heap libre en bytes
uptime int Uptime en secondes
modules string Liste des modules activés (séparés par virgule)

Exemple d'utilisation:

c2:> send espilon-demo system_info

[espilon-demo] INFO: chip=esp32s3 cores=2 flash=external heap=189432 uptime=7845s modules=network,fakeap

system_info Gauche: Output ESP32 | Droite: Réponse dans C3PO


system_mem

Monitore l'utilisation mémoire en temps réel. Essentiel pour détecter les fuites mémoire ou prévenir les crashes.

Syntaxe:

c2:> send <device_id> system_mem

Réponse:

heap_free=245760 heap_min=180000 internal_free=120000

Champs retournés:

Champ Type Description
heap_free int Heap libre actuelle (bytes)
heap_min int Heap minimale depuis le boot (watermark)
internal_free int SRAM interne disponible (bytes)

Interprétation:

  • heap_free > 100KB: Situation normale
  • heap_free 50-100KB: Attention, mémoire limitée
  • heap_free < 50KB: Critique, risque de crash
  • heap_min décroissant: Possible fuite mémoire

Exemple de monitoring:

c2:> send espilon-demo system_mem
[espilon-demo] INFO: heap_free=189432 heap_min=156000 internal_free=98000

# 10 minutes plus tard...
c2:> send espilon-demo system_mem
[espilon-demo] INFO: heap_free=145000 heap_min=145000 internal_free=78000

# La heap_min a baissé = consommation croissante

system_mem Gauche: Output ESP32 | Droite: Réponse dans C3PO


system_uptime

Affiche le temps de fonctionnement depuis le dernier boot.

Syntaxe:

c2:> send <device_id> system_uptime

Réponse:

uptime=86523 days=1 h=00 m=02 s=03

Champs retournés:

Champ Type Description
uptime int Uptime total en secondes
days int Nombre de jours
h int Heures (0-23)
m int Minutes (0-59)
s int Secondes (0-59)

Cas d'usage:

  • Vérifier la stabilité d'un device
  • Détecter les redémarrages inattendus
  • Planifier les maintenances

Exemple:

c2:> send espilon-demo system_uptime
[espilon-demo] INFO: uptime=259245 days=3 h=00 m=00 s=45

system_uptime Gauche: Output ESP32 | Droite: Réponse dans C3PO


system_reboot

Redémarre le device de manière contrôlée.

Syntaxe:

c2:> send <device_id> system_reboot

Comportement:

  1. Le device envoie un message de confirmation
  2. Délai de 250ms pour permettre la transmission
  3. Appel à esp_restart()
  4. Reconnexion automatique au C2 (~30 secondes)

Perte de Connexion

Le device se déconnecte pendant le reboot. Surveillez la liste des devices pour confirmer la reconnexion.

Exemple:

c2:> send espilon-demo system_reboot
[espilon-demo] INFO: Rebooting device

# ~30 secondes plus tard...
[SYSTEM] Device connected: espilon-demo (192.168.1.100)

system_reboot Gauche: Output ESP32 | Droite: Réponse dans C3PO


Implémentation

Le module est implémenté dans components/mod_system/cmd_system.c.

Structure des commandes:

static const command_t system_cmds[] = {
    { "system_reboot", 0, 0, cmd_system_reboot, NULL, false },
    { "system_mem",    0, 0, cmd_system_mem,    NULL, false },
    { "system_uptime", 0, 0, cmd_system_uptime, NULL, false },
    { "system_info",   0, 0, cmd_system_info,   NULL, false }
};

APIs ESP-IDF utilisées:

Fonction Usage
esp_chip_info() Informations chip
esp_get_free_heap_size() Heap libre
esp_get_minimum_free_heap_size() Heap watermark
heap_caps_get_free_size() Mémoire interne
esp_timer_get_time() Uptime en microsecondes
esp_restart() Redémarrage

Bonnes Pratiques

Monitoring Régulier

Configurez un script pour surveiller la santé des devices:

# Exemple de monitoring automatique
import schedule

def check_health():
    for device in connected_devices:
        send_command(device, "system_mem")
        send_command(device, "system_uptime")

schedule.every(5).minutes.do(check_health)

Détection de Fuites Mémoire

  1. Notez la heap_min au démarrage
  2. Vérifiez périodiquement
  3. Si heap_min diminue continuellement → fuite probable

Reboot Préventif

Pour les déploiements longue durée, planifiez des reboots préventifs:

# Reboot quotidien à 4h du matin
c2:> schedule espilon-demo "04:00" system_reboot

Précédent: Modules Overview | Suivant: Network Module