Thanks to visit codestin.com
Credit goes to lib.rs

#codec #iot #sensor

no-std bin+lib alec

Adaptive Lazy Evolving Compression - Smart codec for IoT sensor data with 90% compression ratio

1 stable release

new 1.0.0 Jan 16, 2026

#292 in Embedded development

AGPL-3.0

265KB
5.5K SLoC

ALEC — Adaptive Lazy Evolving Compression

ALEC Logo

CI License Crates.io

Un codec de compression intelligent pour les environnements contraints

CaractéristiquesCas d'usageDémarrage rapideDocumentationContribuer


Pourquoi ALEC ?

Dans de nombreux environnements, chaque bit compte :

  • 🛰️ Communications spatiales à quelques kbps
  • 🌿 Capteurs IoT sur batterie pendant des années
  • 🌍 Zones rurales avec connectivité satellite limitée
  • 🌊 Liaisons acoustiques sous-marines
  • 🏭 Réseaux industriels à bande passante restreinte

ALEC répond à ces défis avec une approche innovante : ne transmettre que ce qui a de la valeur.


Caractéristiques

🦥 Compression Paresseuse (Lazy)

ALEC ne transmet pas toutes les données — il transmet d'abord la décision, puis les détails seulement si nécessaire.

Sans ALEC:  [Données complètes] ───────────────────▶ 1000 octets
Avec ALEC:  [Alerte: anomalie détectée] ───────────▶ 12 octets
            [Détails sur demande] ─────────────────▶ 500 octets (si demandé)

🔄 Contexte Évolutif (Evolving)

Émetteur et récepteur construisent un dictionnaire partagé qui s'enrichit avec le temps.

Semaine 1:  "température=22.3°C" ──────────────────▶ 20 octets
Semaine 4:  [code_7][+0.3] ────────────────────────▶ 3 octets

⚖️ Asymétrie Intelligente

L'effort de calcul est placé là où les ressources existent.

Mode Émetteur Récepteur Usage
Standard Léger Lourd Capteurs IoT, drones
Inversé Lourd Léger Diffusion broadcast

📊 Classification par Priorité

Chaque donnée reçoit une priorité qui détermine son traitement :

Priorité Comportement Exemple
P1 CRITIQUE Envoi immédiat + accusé Alerte incendie
P2 IMPORTANT Envoi immédiat Anomalie détectée
P3 NORMAL Envoi standard Mesure périodique
P4 DIFFÉRÉ Sur demande uniquement Historique détaillé
P5 JETABLE Jamais envoyé Logs de debug

Cas d'usage

🚜 Agriculture connectée

Des capteurs dans les champs surveillent humidité, température et nutriments. Avec ALEC, ils fonctionnent 10 ans sur batterie en ne transmettant que les alertes et anomalies.

🏥 Télémédecine rurale

Un échographe portable en zone isolée envoie d'abord "anomalie cardiaque suspectée" en 50 octets. Le médecin distant décide s'il a besoin de l'image complète.

🚛 Flottes de véhicules

500 camions remontent leur position. Après quelques semaines, le système connaît les routes habituelles et ne transmet que les écarts.

🛰️ Observation spatiale

Un satellite photographie la Terre. Il n'envoie que les changements significatifs par rapport aux images précédentes.

➡️ Voir tous les cas d'usage détaillés


Démarrage rapide

Prérequis

  • Rust 1.70+ (émetteur et récepteur)
  • Ou : C compiler (émetteur embarqué uniquement)

Installation

# Cloner le repo
git clone https://github.com/zeekmartin/alec-codec.git
cd alec-codec

# Compiler
cargo build --release

# Lancer les tests
cargo test

Premier exemple

use alec::{Encoder, Decoder, Context, RawData};

fn main() {
    // Créer encodeur et décodeur avec contexte partagé
    let mut ctx_emitter = Context::new();
    let mut ctx_receiver = Context::new();
    
    let encoder = Encoder::new();
    let decoder = Decoder::new();
    
    // Simuler des mesures
    for i in 0..100 {
        let data = RawData::new(20.0 + (i as f64 * 0.1), i);
        
        // Encoder
        let message = encoder.encode(&data, &ctx_emitter);
        ctx_emitter.observe(&data);
        
        // ... transmettre message ...
        
        // Décoder
        let decoded = decoder.decode(&message, &ctx_receiver).unwrap();
        ctx_receiver.observe(&decoded);
        
        println!("Original: {:.1}, Taille: {} octets", 
                 data.value, message.len());
    }
}

➡️ Guide de démarrage complet


Documentation

Document Description
Architecture Vue d'ensemble technique
Applications Cas d'usage détaillés
Getting Started Guide de démarrage
Protocol Reference Spécification du protocole
Security Considérations de sécurité
API Reference Interfaces et APIs
FAQ Questions fréquentes
Glossary Glossaire des termes

Performances

Résultats sur dataset de référence (capteur température, 24h, 1 mesure/min) :

Métrique Sans contexte Après rodage Objectif
Ratio compression 0.65 0.08 < 0.10 ✅
Latence P1 45ms 42ms < 100ms ✅
RAM émetteur 12KB 28KB < 64KB ✅

Roadmap

  • v0.1 — Prototype fonctionnel ✅
  • v0.2 — Contexte évolutif ✅
  • v0.3 — Synchronisation automatique ✅
  • v0.4 — Mode flotte ✅
  • v1.0 — Production ready ✅

➡️ Voir la roadmap complète


Contribuer

Les contributions sont les bienvenues ! Consultez :

# Workflow typique
1. Fork le repo
2. Créer une branche: git checkout -b feature/ma-feature
3. Suivre le template approprié dans prompts/
4. Soumettre une PR

License

ALEC is dual-licensed:

Open Source (AGPL-3.0)

Free for open source projects, research, and personal use. You must open-source your code if you distribute ALEC or use it in a network service.

[dependencies]
alec = "1.0"

Commercial License

For proprietary use without open-source obligations. Starting at $500/year for startups.

👉 Get a Commercial License

See LICENSE for details.


Remerciements

ALEC s'inspire des travaux sur :

  • Les codes correcteurs de la NASA (turbo codes, LDPC)
  • La compression par dictionnaire (LZ77, LZ78)
  • Les protocoles IoT efficients (CoAP, MQTT-SN)

Fait avec ❤️ pour un monde où chaque bit compte

Dependencies

~0.3–13MB
~107K SLoC