Skip to content

Architecture du Systeme Essensys

Cette documentation decrit l'architecture logicielle et systeme de l'ecosysteme Essensys, en s'appuyant sur les principes du modele C4 (Context, Containers, Components, Code) et l'approche Clean Architecture.

1. Contexte du Systeme (System Context)

Le systeme Essensys est une solution domotique concue initialement autour de cartes materielles embarquees (BP_MQX_ETH). Le defi majeur de l'architecture actuelle est de moderniser l'acces et le controle de ce materiel "legacy" tout en assurant une retrocompatibilite totale.

Objectif Principal

Fournir une interface de controle moderne, securisee et performante (via des dashboards web, mobile, ou messagerie WhatsApp) tout en dialoguant avec un parc materiel existant dont les capacites reseau et logiques (firmware C sur Coldfire MCF52259) sont figees.

Diagramme de Contexte

graph TB
    user["👤 Utilisateur Final<br/>Navigateur / Mobile / WhatsApp"]
    admin["🔧 Administrateur<br/>SSH / HTTPS / Control Plane"]

    essensys["🏠 Ecosysteme Essensys<br/>Chauffage, volets, eclairage,<br/>alarme, securite"]

    hardware["🔌 Cartes BP_MQX_ETH<br/>Coldfire MCF52259 / MQX RTOS"]
    whatsapp["📱 WhatsApp<br/>Notifications via OpenClaw"]
    homeassistant["🏠 Home Assistant<br/>MQTT Discovery"]
    linky["⚡ Compteur Linky<br/>Teleinfo UART 1200 bauds"]
    unifi["📷 UniFi Protect<br/>Cameras IP"]
    dockerhub["🐳 Docker Hub<br/>Registry images"]
    github["⚙️ GitHub Actions<br/>CI/CD multi-arch"]

    user -->|HTTPS / WhatsApp| essensys
    admin -->|SSH / HTTPS| essensys
    essensys <-->|Polling HTTP 2s<br/>Port 80 / LAN| hardware
    essensys <-->|API WhatsApp Web| whatsapp
    essensys <-->|MQTT| homeassistant
    hardware <---|UART 1200 bauds| linky
    essensys -->|HTTPS| unifi
    github -->|Docker Push ARM64/AMD64| dockerhub
    admin -->|Git Push| github

    classDef system fill:#438DD5,stroke:#2E6295,color:#fff
    classDef external fill:#999,stroke:#666,color:#fff
    classDef person fill:#08427B,stroke:#052E56,color:#fff

    class essensys system
    class hardware,whatsapp,homeassistant,linky,unifi,dockerhub,github external
    class user,admin person

2. Le Defi Central : le Client Legacy

L'ensemble de l'architecture Essensys existe pour une seule raison : combler l'obsolescence d'un controleur materiel dont le firmware ne peut pas etre modifie.

La carte BP_MQX_ETH impose des contraintes techniques severes :

Contrainte Impact sur l'architecture
JSON malformes (cles non-quotees) Le backend Go doit normaliser chaque requete entrante
Content-Type ;charset=UTF-8 (espace avant ;) Header HTTP non-standard code en dur dans le firmware
Reponse HTTP en single-packet TCP Le reverse proxy Nginx doit bufferiser chaque reponse
Code 201 Created pour les POST Le backend doit repondre 201 au lieu du 200 standard
Champ _de67f en premiere position JSON L'ordre des cles JSON doit etre controle cote serveur
Port 80 obligatoire Le backend doit ecouter sur le port 80 (pas configurable)
Polling synchrone toutes les 2 secondes Pas de push, pas de WebSocket, pas d'evenements
Valeurs 8 bits (0-255) par indice Toute l'information passe par une table d'echange d'octets

Pour une analyse detaillee du client legacy, voir Le Client Embarque BP_MQX_ETH.

Pour comprendre comment le serveur comble ces lacunes, voir Le Pattern Bridge : du Legacy au Moderne.

3. La Table d'Echange : Coeur du Systeme

Le mecanisme central de communication est une table d'echange de 953 octets en memoire, partagee entre le firmware et le serveur. Chaque indice represente un etat, une configuration ou une commande (lumiere, volet, chauffage, alarme). Cette table est la source de verite unique du systeme.

Pour la documentation complete, voir Table d'Echange - Reference Technique.

4. Piliers Architecturaux

Le systeme a ete modularise pour separer les responsabilites :

  • Presentation (Frontend) : Application React/Vite qui traduit les indices opaques en concepts visuels (boutons, sliders, zones). Aucune logique metier embarquee.
  • Bridge (Backend) : Composant Go unique dedie a la traduction entre les API web modernes (REST/JSON normalise) et les trames specifiques au materiel. Agit comme un Anti-Corruption Layer.
  • Intelligence (MCP + OpenClaw) : Couche IA connectee via le Model Context Protocol pour permettre l'interaction en langage naturel et la reformulation des alertes.
  • Observabilite (Prometheus + Alertmanager) : Stack de monitoring complet avec alertes relayees via WhatsApp.
  • Infrastructure Edge : Nginx (LAN) et Traefik (WAN/SSL) pour le routage, plus AdGuard pour le DNS.
  • Deploiement as-Code : Ansible pour la configuration, Docker Compose pour l'orchestration, GitHub Actions pour le CI/CD multi-architecture.

5. Navigation dans la Documentation

Document Contenu
Le Client Embarque BP_MQX_ETH Hardware, RTOS, contraintes techniques, obsolescence
Securite Authentification HTTP Basic, chiffrement AES des ordres alarme, EEPROM
Build et Toolchain CodeWarrior, makefile, structure projet, versions, format S19
Protocoles Internes I2C (BA), UART (ecran, TeleInfo/Linky), SPI (EEPROM)
Configuration Hardware Mapping GPIO, peripheriques, parametres systeme, sequence init
Deploiement et OTA Bootloader, mise a jour OTA via S19, flashing JTAG/BDM
Diagnostic et Debug EspionRS, GPIO debug, CRC, surveillance, indicateurs Ethernet
Table d'Echange - Reference Technique Cartographie des 953 indices, droits d'acces, scenarios, bitmasks
Domaines Fonctionnels Alarme, chauffage, volets, cumulus, securite, fuites, vent, arrosage
Architecture des Conteneurs (Services) Les 14 services deployes, leurs roles et interactions
Le Pattern Bridge : du Legacy au Moderne Comment le backend Go comble l'obsolescence du client
Architecture de Deploiement Ansible, Docker Compose, CI/CD, infrastructure
Diagrammes d'Architecture Tous les diagrammes Mermaid + PNG (globale, flux, bridge, deploiement)
Autocritique Clean Architecture / DDD Analyse critique, score, recommandations
Vue d'Ensemble Materiel Architecture physique, 4 cartes, bus I2C, comparatif, protections
SC944D — Boitier Principal MCF52259, Ethernet, Flash SPI, TRIACs, GPIO complet, BOM
SC940D — BA Pieces de Vie PIC16F946, 17 relais, 3 variateurs, borniers
SC941C — BA Pieces d'Eau PIC16F946, 21 relais, 1 variateur, borniers
SC942C — BA Chambres PIC16F946, 17 relais, 4 variateurs, BOM complet