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:
Réponse:
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
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:
Réponse:
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
Gauche: Output ESP32 | Droite: Réponse dans C3PO
system_uptime¶
Affiche le temps de fonctionnement depuis le dernier boot.
Syntaxe:
Réponse:
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:
Gauche: Output ESP32 | Droite: Réponse dans C3PO
system_reboot¶
Redémarre le device de manière contrôlée.
Syntaxe:
Comportement:
- Le device envoie un message de confirmation
- Délai de 250ms pour permettre la transmission
- Appel à
esp_restart() - 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)
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¶
- Notez la
heap_minau démarrage - Vérifiez périodiquement
- Si
heap_mindiminue continuellement → fuite probable
Reboot Préventif¶
Pour les déploiements longue durée, planifiez des reboots préventifs:
Précédent: Modules Overview | Suivant: Network Module