Skip to content

Table d'Echange - Reference Technique

La table d'echange est la structure de donnees centrale du systeme Essensys. C'est un tableau d'octets en memoire (unsigned char Tb_Echange[]) partage entre le firmware, l'ecran tactile et le serveur. Chaque indice represente un etat, une configuration ou une commande.

Ce document est extrait directement du code source C du firmware : H/TableEchange.h, H/TableEchangeDroits.h, C/TableEchangeAcces.c et C/TableEchangeFlash.c.

1. Structure Memoire

// Tableau principal en RAM
unsigned char Tb_Echange[Nb_Tbb_Donnees];

// Copie precedente (pour detecter les changements)
unsigned char Tb_EchangePrecedent[Nb_Tbb_Donnees];

// Droits d'acces par indice
const unsigned char Tb_Echange_Droits[Nb_Tbb_Donnees];
  • Chaque indice contient 1 octet (0-255)
  • La taille totale est definie par l'enum Nb_Tbb_Donnees (953 indices)
  • Les valeurs superieures a 255 utilisent des paires LSB/MSB

2. Droits d'Acces

Chaque indice possede un masque de droits defini dans H/TableEchangeDroits.h :

Code Masque Signification
__ 0x00 Aucun acces (ecran/serveur). Seul le BP lit/ecrit directement
R_ 0x01 Lecture seule (ecran/serveur)
_W 0x02 Ecriture seule (ex: cle d'acces distance)
RW 0x03 Lecture et ecriture
RWS 0x83 Lecture, ecriture, et sauvegardee en Flash au redemarrage

Regles d'Acces

Source : C/TableEchangeAcces.c

BP (firmware)     : acces direct en lecture/ecriture (pas de controle)
Ecran et Ethernet : acces via uc_TableEchange_Ecrit_Data() et uc_TableEchange_Lit_Data()
                    avec verification des droits et traitements speciaux

Traitements Speciaux a l'Ecriture

Certains indices declenchent une logique supplementaire quand ils sont ecrits :

Indices Comportement
Minutes, Heure, Jour, Mois, Annee Mise a jour de la structure date/heure RTC
VacanceFin_A Declenchement de la verification date retour vacances
Chauf_zj_Auto ... Chauf_zsb2_Mode Recalcul immediat de la consigne chauffage
Chauf_zj_Mode (depuis serveur) Flag uc_ChauffageModifieDepuisServeur_zj
Cumulus_Mode (depuis serveur) Flag uc_CumulusModifieDepuisServeur

3. Cartographie Complete des Indices

Extraite de l'enum Tbb_Donnees_Index dans H/TableEchange.h.

3.1 Versions (indices 0-4)

Indice Mnemonique Droits Description
0 Version_SoftBP_Embedded R_ Version firmware du BP (numero sauvegarde)
1 Version_SoftBP_Web R_ Version web (pour gestion telechargement)
2 Version_SoftIHM_Majeur RWS Version ecran tactile (majeur)
3 Version_SoftIHM_Mineur RWS Version ecran tactile (mineur)
4 Version_TableEchange R_ Version de la table d'echange (compatibilite)

3.2 Date et Heure (indices 5-9)

Indice Mnemonique Droits Description
5 Minutes RW Minutes (base de l'horloge RTC)
6 Heure RW Heure
7 Jour RW Jour du mois
8 Mois RW Mois
9 Annee RW Annee (2 chiffres)

3.3 Etat du Systeme (indices 10-12)

Indice Mnemonique Droits Description Bits
10 Status RW Etat global b0: heures creuses, b1: delestage, b2: secouru
11 Alerte RW Alertes actives b0: alarme, b1: fuite lave-linge, b2: fuite lave-vaisselle
12 Information RW Defauts communication b0: compteur ERDF, b1: IHM, b2: BA PDV, b3: BA CHB, b4: BA PDE

3.4 Chauffage - Planning Automatique (indices 13-348)

Programmation horaire sur 1 semaine : 1 ordre par heure sur 7 jours, 6 modes possibles (4 bits). Soit 84 octets par zone.

Plage Mnemonique Zone
13-96 Chauf_zj_Auto Zone jour (salon, sejour)
97-180 Chauf_zn_Auto Zone nuit (chambres)
181-264 Chauf_zsb1_Auto Salle de bain 1
265-348 Chauf_zsb2_Auto Salle de bain 2

Consignes possibles (bits 0-3) :

Valeur Mode
0 OFF
1 CONFORT
2 ECO
3 ECO+
4 ECO++
5 HORS GEL

3.5 Chauffage - Mode Immediat (indices 349-352)

Forcement immediat des consignes chauffage. Proteges par mutex (acces concurrent Main/Ecran/Ethernet).

Indice Mnemonique Description Encodage
349 Chauf_zj_Mode Zone jour Voir ci-dessous
350 Chauf_zn_Mode Zone nuit
351 Chauf_zsb1_Mode Salle de bain 1
352 Chauf_zsb2_Mode Salle de bain 2

Encodage de l'octet mode :

b0-b3 : consigne (0=OFF, 1=CONFORT, 2=ECO, 3=ECO+, 4=ECO++, 5=HORS GEL)
b4-b5 : mode (0=automatique, 1=force, 2=anticipe)
b6    : 1 = reprendre le dernier fonctionnement memorise
b7    : 1 = continuer le fonctionnement actuel

Exemples :
  0x00-0x05 : forcage en automatique
  0x10-0x15 : forcage en mode force + consigne
  0x20-0x25 : forcage en mode anticipe
  0x40      : reprendre le dernier mode memorise
  0x80      : continuer le mode actuel

3.6 Cumulus (indice 353)

Indice Mnemonique Droits Valeurs
353 Cumulus_Mode RWS 0=Autonome (ON), 1=Gestion HC, 2=OFF

3.7 Vacances (indices 354-362)

Indice Mnemonique Description
354 VacanceFin_H Heure retour vacances
355 VacanceFin_Mn Minute
356 VacanceFin_J Jour
357 VacanceFin_M Mois
358 VacanceFin_A Annee (declenche verification date)
359 VacanceFin_zj_Force Consigne chauffage zone jour au retour
360 VacanceFin_zn_Force Consigne chauffage zone nuit au retour
361 VacanceFin_zsb1_Force Consigne SDB 1 au retour
362 VacanceFin_zsb2_Force Consigne SDB 2 au retour

Note : La section Vacances se termine a l'indice 362 (VacanceFin_zsb2_Force). L'indice 363 est le premier indice de la section Arrosage (Arrose_Mode).

3.8 Arrosage (indices 363-406)

Plage Mnemonique Description
363 Arrose_Mode 0=OFF, 1-254=duree forcage (min), 255=auto
364-405 Arrose_Auto Planning hebdo (42 octets, 1 bit / 30 min)
406 Arrose_Detect 0=detecteur pluie OFF, 1=actif

3.9 Alarme (indices 407-435)

Indice Mnemonique Description
407 Alarme_AccesADistance 1=autorise modification a distance
408 Alarme_Mode 0=OFF, 1=reglage, 2=independante, 3-6=sur scenario
409 Alarme_Commande 1=demande mise sous alarme
410 Alarme_CodeSaisiLSB Code saisi (chiffres 1-2, 4 bits chacun)
411 Alarme_CodeSaisiMSB Code saisi (chiffres 3-4)
412 Alarme_Autorisation 0=attente, 1=code valide, 2=code invalide
413 Alarme_SuiviAlarme Etape automate (0=depart, 3=sortie, 4=croisiere, 5=entree, 6=intrusion)
414 Alarme_Detection Bitmask : b0=ouverture, b1=presence1, b2=presence2
415 Alarme_Fraude Bitmask : b0=tableau, b1=IHM, b2-5=detecteurs/sirenes, b6=batterie
416 Alarme_SuiviChangementCode Etape changement code
417-418 Alarme_CodeUser1 LSB/MSB Code alarme 1 (acces __ = indirect uniquement)
419-420 Alarme_CodeUser2 LSB/MSB Code alarme 2 (non utilise)
421 Alarme_CompteARebours Temps restant (sec) en procedure sortie/entree
423 Alarme_TestRAZPresence RAZ detecteurs en mode reglage
424 Alarme_TestSirenes 1=sirene int, 2=sirene ext
425-435 AlarmeConfig 11 parametres config (code requis, detecteurs actifs, sirenes, blocage volets)

3.10 Alerte et Securite (indices 436-443)

Indice Mnemonique Description
436 Alerte_Intensite Intensite sirene (25=fort, 50=moyen, 75=faible)
437 Alerte_Duree 0=jusqu'a disparition, 1-255=secondes
438 Alerte_TestSirene Activer sirene test
439 Alerte_Acquit Acquittement alerte
440 Securite_PriseCoupe 1=prises securite coupees
441 Securite_FuiteLinge 1=detection fuite lave-linge active
442 Securite_FuiteVaisselle 1=detection fuite lave-vaisselle active
443 Securite_FuiteAlerte 1=alerte sonore en cas de fuite

3.11 Reveil (indices 444-458)

Fonction reveil : provoque l'ouverture des volets roulants a l'heure programmee.

Plage Zone Indices : H / Mn / ON
444-446 Grande chambre H=444, Mn=445, ON=446
447-449 Chambre 1 H=447, Mn=448, ON=449
450-452 Chambre 2 H=450, Mn=451, ON=452
453-455 Chambre 3 H=453, Mn=454, ON=455
456-458 Bureau H=456, Mn=457, ON=458

3.12 Delestage (indice 459)

Indice Mnemonique Description
459 Delestage 0=OFF, <>0=actif

3.13 Teleinfo Compteur ERDF (indices 460-484)

Indice Mnemonique Description
460 TeleInf_OPTARIF Option tarifaire (BASE, HC, EJP, BBR)
461 TeleInf_PTEC Periode tarifaire en cours (HC, HP, etc.)
462 TeleInf_ADPS Avertissement depassement puissance souscrite
463-464 TeleInf_PAPP LSB/MSB Puissance apparente (VA)
465-476 TeleInf_HPB_* Consommation heures pleines/base (6 paires LSB/MSB)
477-488 TeleInf_HC_* Consommation heures creuses (6 paires LSB/MSB)
489-493 TeleInf_Repartition_* Repartition en % (chauffage, refroid, eau chaude, prises, autres)

3.14 Eclairage et Volets (indices 494-589)

Indices exacts recalcules depuis l'enum Tbb_Donnees_Index (verifies par recoupement avec les indices scenario 617-622 utilises par le backend et Home Assistant).

Plage Mnemonique Droits Description
494-501 Variateurs_PDV_Conf RWS Config variateurs PDV (8 max par BA) : 0=TOR rampe, 1=gradateur, 2=TOR sans rampe
502-509 Variateurs_CHB_Conf RWS Config variateurs CHB
510-517 Variateurs_PDE_Conf RWS Config variateurs PDE
518-533 Lampes_PDV_Temps RWS Temps extinction lampes PDV (1-255 min, 0=pas d'auto)
534-549 Lampes_CHB_Temps RWS Temps extinction lampes CHB
550-565 Lampes_PDE_Temps RWS Temps extinction lampes PDE
566-573 Volets_PDV_Temps RWS Temps action volets PDV (1-255 sec)
574-581 Volets_CHB_Temps RWS Temps action volets CHB
582-589 Volets_PDE_Temps RWS Temps action volets PDE

Temps d'action des volets (indices 566-589)

Chaque volet possede un seul temps d'action en secondes (1-255), utilise a la fois pour l'ouverture et la fermeture : c'est la duree de maintien du relais de commande (montee ou descente). La BA alimente le relais, decompte le temps, puis coupe automatiquement la commande (uc_StopVolet() dans le firmware BA). Le fin de course du moteur arrete physiquement le volet ; le temps doit donc etre regle legerement au-dessus de la course la plus lente.

Indice par volet (1 octet par volet, 8 reserves par BA) :

Indice Volet (BA PDV) Indice Volet (BA CHB) Indice Volet (BA PDE)
566 Salon 1 574 Grande chambre 1 582 Cuisine 1
567 Salon 2 575 Grande chambre 2 583 Cuisine 2
568 Salon 3 576 Petite chambre 1 584 Salle de bain 1
569 Salle a manger 1 577 Petite chambre 2 585 Store terrasse
570 Salle a manger 2 578 Petite chambre 3 586-589 non utilises
571 Bureau 579-581 non utilises
572-573 non utilises

Comportement :

  • Valeur 0 : la BA applique sa valeur par defaut firmware : 120 s pour un volet (uc_TEMPS_CDE_VOLET_DEFAUT), 255 s pour le store terrasse (uc_TEMPS_CDE_STORE_DEFAUT)
  • Propagation : le BP surveille ces indices dans Tb_Echange[] et pousse tout changement vers les BA via I2C (tache BA, flag b_TpsAction)
  • Persistance : double — cote BP en Flash (droit RWS), cote BA en EEPROM (adresses 0x002A+n), donc conserve apres coupure secteur
  • Reglage via serveur : ecriture directe de l'indice, ex. {"k": 566, "v": "25"} regle le volet salon 1 a 25 secondes (pas de bloc complet scenario necessaire, ce ne sont pas des indices de commande)

Sources : H/TableEchange.h (zone temps d'action), C/ba.c (envoi I2C), firmware BA traitement.c / slavenode.c / constantes.h.

3.15 Scenarios (indices 590+)

Indice Mnemonique Description
590 Scenario Numero du scenario a lancer (0=aucun, 1-8)
591 Scenario_DernierLance Dernier scenario lance
592-632 Scenario1 Parametres scenario 1 (41 valeurs, voir section 4)
633-673 Scenario2 "Je sors"
674-714 Scenario3 "Je pars en vacances"
715-755 Scenario4 "Je rentre"
756-796 Scenario5 "Je vais me coucher"
797-837 Scenario6 "Je me leve"
838-878 Scenario7 "Personnalise 1"
879-919 Scenario8 "Personnalise 2"

Puis en fin de table :

Indice Mnemonique Description
~920-921 EtatBP1/2 Etat du BP (b0: alarme activee, b1: alarme declenchee)
~922-937 Cle_Acces_Distance Cle 32 chiffres (16 octets, 2 chiffres / octet, acces _W)
~938 Store_VR 0=store normal, 1=store comme 15e VR
~939 Store_Vitesse_Vent_Repliage Seuil repliage auto (km/h)
~940 Store_Vitesse_Vent_Instantane Vitesse vent actuelle (km/h)
~941-942 Constructeur_Code LSB/MSB Code constructeur (lecture seule, en dur: 0x1119)
~943-944 Test_ETOR_1/2 Etat entrees logiques (detecteurs, fraudes)
~945 EtatEthernet b0=cable, b1=DHCP, b2=DNS, b3=serveur
~946 Mode_Test 0=normal, 1=test (desactive sauvegarde Flash)
~947-952 AdresseMAC_1..6 Adresse MAC du BP (lecture seule)

4. Zoom : Parametres de Scenario (enumScenario)

Chaque scenario contient 41 parametres definis dans enumScenario. La base du Scenario1 est l'indice 592 dans la table.

Indices absolus = indice de base du scenario dans la table + offset dans l'enum.

Pour les ordres envoyes par le serveur via /api/myactions, les indices sont ceux du scenario 1, soit la plage 592-632. Ces valeurs sont confirmees par trois sources independantes : l'enum enumScenario du firmware, la reference d'indices du backend (MCP_DEVICE_INDEX_REFERENCE.md) et la table_reference.json de l'integration Home Assistant.

4.1 Controle Alarme et Configuration (offset 0-12, indices 592-604)

Offset Indice abs Mnemonique Description
0 592 Scenario_Confirme_Scenario 1=demander confirmation a l'ecran
1 593 Scenario_Alarme_ON 0=rien, 1=activer alarme, 2=desactiver
2-12 594-604 Scenario_AlarmeConfig 11 parametres config alarme

4.2 Eteindre Lumieres (offset 13-18, indices 605-610)

Chaque indice est un bitmask : chaque bit represente une lampe ou un variateur.

Indice Mnemonique Zone Mapping des bits
605 Eteindre_PDV_LSB Pieces de vie (bas) b0=entree, b1=salon1, b2=salon2, b3=dressing1, b4=dressing2
606 Eteindre_PDV_MSB Pieces de vie (haut) b5=variateur bureau, b6=variateur salle a manger, b7=variateur salon
607 Eteindre_CHB_LSB Chambres (bas) b0=escalier, b1=gr.chambre1, b2=gr.chambre2, b3=pet.chambre1-1, b4=pet.chambre1-2, b5=pet.chambre2, b6=pet.chambre3
608 Eteindre_CHB_MSB Chambres (haut) b4=var.pet.chambre3, b5=var.pet.chambre2, b6=var.pet.chambre1, b7=var.gr.chambre
609 Eteindre_PDE_LSB Pieces d'eau (bas) b0=cuisine1, b1=cuisine2, b2=SDB1, b3=SDB2-1, b4=SDB2-2, b5=WC1, b6=WC2, b7=service
610 Eteindre_PDE_MSB Pieces d'eau (haut) b0=degagement1, b1=degagement2, b2=terrasse, b3=annexe1, b4=annexe2, b7=var.SDB1

4.3 Allumer Lumieres (offset 19-24, indices 611-616)

Meme structure que les indices "eteindre" mais pour allumer.

Indice Mnemonique Zone
611 Allumer_PDV_LSB Pieces de vie (bas) — meme mapping que 605
612 Allumer_PDV_MSB Pieces de vie (haut) — meme mapping que 606
613 Allumer_CHB_LSB Chambres (bas) — meme mapping que 607
614 Allumer_CHB_MSB Chambres (haut) — meme mapping que 608
615 Allumer_PDE_LSB Pieces d'eau (bas) — meme mapping que 609
616 Allumer_PDE_MSB Pieces d'eau (haut) — meme mapping que 610

4.4 Volets (offset 25-30, indices 617-622)

Ces indices declenchent le mouvement. La duree du mouvement est definie par les temps d'action (indices 566-589, voir section 3.14).

Indice Mnemonique Zone Mapping des bits
617 OuvrirVolets_PDV Ouvrir PDV b0-2=salon(3), b3-4=SAM(2), b5=bureau
618 OuvrirVolets_CHB Ouvrir CHB b0-1=gr.chambre(2), b2=pet.ch1, b3=pet.ch2, b4=pet.ch3
619 OuvrirVolets_PDE Ouvrir PDE b0-1=cuisine(2), b2=SDB1, b3=store terrasse
620 FermerVolets_PDV Fermer PDV meme mapping que 617
621 FermerVolets_CHB Fermer CHB meme mapping que 618
622 FermerVolets_PDE Fermer PDE meme mapping que 619

4.5 Securite, Chauffage, Cumulus, Reveil (offset 31-40, indices 623-632)

Indice Mnemonique Description
623 Scenario_Securite 0=rien, 1=couper prises, 2=remettre
624 Scenario_Machines 0=rien, 1=couper machines a laver, 2=remettre
625 Scenario_Chauf_zj Consigne chauffage zone jour (meme encodage que 3.5)
626 Scenario_Chauf_zn Consigne chauffage zone nuit
627 Scenario_Chauf_zsb1 Consigne SDB 1
628 Scenario_Chauf_zsb2 Consigne SDB 2
629 Scenario_Cumulus 0=autonome, 1=HC, 2=OFF, 0x40=reprendre, 0x80=continuer
630 Scenario_Reveil_Reglage 1=lancer procedure reglage reveils
631 Scenario_Reveil_ON 0=rien, 1=armer reveil, 2=desactiver
632 Scenario_Efface 1=effacer, 2-6=init predefinies

5. L'Indice 590 : Trigger Scenario

L'indice 590 (Scenario) est le declencheur. Sans lui, aucun parametre de scenario n'est applique.

{"k": 590, "v": "1"}

Le backend Go ajoute automatiquement cet indice lors de la generation du bloc complet via ActionService.GenerateCompleteBlock().

6. Regle du Bloc Complet (605-622)

Pourquoi Envoyer la Table Complete ?

Le firmware lit les indices scenario comme un bloc atomique. L'absence d'un indice signifie "garder l'etat actuel". Pour garantir un comportement deterministe, il faut :

  1. Toujours inclure tous les indices 605 a 622 (min. requis par le backend actuel)
  2. Initialiser les indices non utilises a 0
  3. Inclure l'indice 590 = 1 comme trigger

Exemple : Allumer la Lampe de la Petite Chambre 3

La lampe de la petite chambre 3 est sur l'indice 613 (Allumer_CHB_LSB), bit 6 (valeur 64).

{
  "_de67f": null,
  "actions": [{
    "guid": "550e8400-e29b-41d4-a716-446655440000",
    "params": [
      {"k": 590, "v": "1"},
      {"k": 605, "v": "0"}, {"k": 606, "v": "0"}, {"k": 607, "v": "0"},
      {"k": 608, "v": "0"}, {"k": 609, "v": "0"}, {"k": 610, "v": "0"},
      {"k": 611, "v": "0"}, {"k": 612, "v": "0"},
      {"k": 613, "v": "64"},
      {"k": 614, "v": "0"}, {"k": 615, "v": "0"}, {"k": 616, "v": "0"},
      {"k": 617, "v": "0"}, {"k": 618, "v": "0"}, {"k": 619, "v": "0"},
      {"k": 620, "v": "0"}, {"k": 621, "v": "0"}, {"k": 622, "v": "0"}
    ]
  }]
}

Logique de Merge (Bitwise OR)

Quand plusieurs commandes arrivent simultanement, le backend les combine avec un OR bitwise :

Commande 1 : allumer entree (611, bit 0 = 1)
Commande 2 : allumer salon  (611, bit 1 = 2)
Resultat    : 611 = 1 | 2 = 3 (les deux s'allument)

L'OR ne permet pas d'eteindre. Pour eteindre, utiliser les indices 605-610.

7. Persistance Flash

Source : C/TableEchangeFlash.c

Mecanisme de Sauvegarde

La table d'echange est sauvegardee en Flash interne du MCF52259 :

Parametre Valeur
Adresse Flash 0x7E000
Taille secteur 4096 octets (1 secteur)
CRC CRC-16 sur toute la zone (hors 2 premiers octets)
Position CRC 2 premiers octets du secteur

Sequence de Sauvegarde

1. Verifier Mode_Test != 1 (sinon sauvegarde desactivee)
2. Bloquer les interruptions fil pilote
3. Effacer le secteur Flash (ioctl FLASH_IOCTL_ERASE_SECTOR)
4. Ecrire les Nb_Tbb_Donnees octets de Tb_Echange[]
5. Completer le reste du secteur par des 0
6. Calculer le CRC-16 et l'ecrire aux octets 0-1
7. Reactiver les interruptions

Sequence de Restauration (au Demarrage)

1. Initialiser toute la table avec les valeurs par defaut (vd_Init_Echange())
2. Calculer le CRC de la zone Flash
3. Comparer avec le CRC stocke
4. Si CRC OK : pour chaque indice avec droit VALEUR_SAUVEGARDEE (0x80),
   remplacer la valeur par defaut par la valeur lue en Flash
5. Copier Tb_Echange[] dans Tb_EchangePrecedent[] (eviter les faux changements au demarrage)

Indices Sauvegardes

Seuls les indices avec le flag VALEUR_SAUVEGARDEE (0x80) dans Tb_Echange_Droits[] sont restaures depuis la Flash. Les indices critiques comme les codes alarme sont geres separement via l'EEPROM SPI.

8. Correspondance Serveur

Cles Redis

Le serveur stocke la table d'echange dans Redis :

essensys:client:{clientID}:exchange → Redis Hash (indice → valeur)
essensys:global:actions             → Redis List (queue d'ordres)

Points d'Entree pour Modifier la Table

Source Endpoint / Mecanisme Normalisation
Frontend web POST /api/admin/inject ActionService.AddAction() → bloc complet
Frontend web (alarme) POST /api/web/actions ActionService.AddAction() → bloc complet
MQTT (Home Assistant) Topic MQTT → CommandHandler ActionService.AddAction() → bloc complet
MCP (OpenClaw / IA) Outil send_order Auto-expansion 605-622 dans le MCP server
Control Plane PUT /api/redis/exchange/{clientID}/{index} Ecriture directe Redis (pas de bloc complet)

9. Glossaire — Terminologie API Legacy

Terme Definition
Tb_Echange[] Tableau de 953 octets (unsigned char) en RAM, structure de donnees centrale partagee entre firmware, ecran et serveur
Tb_EchangePrecedent[] Copie du cycle precedent, permet de detecter les changements d'etat
Tb_Echange_Droits[] Tableau const de droits d'acces par indice (R, W, RW, sauvegarde Flash)
Nb_Tbb_Donnees Constante = 953, taille totale de la table d'echange
Tbb_Donnees_Index Enum C definissant le nom symbolique de chaque indice (0-952)
VALEUR_SAUVEGARDEE Flag 0x80 dans les droits, indique que l'indice doit etre persiste en Flash
Bloc complet Ensemble d'indices 590 + 605..622 (19 valeurs) constituant un ordre scenario
Action Objet JSON stocke dans Redis contenant un GUID et des parametres (paires k/v d'indices)
GUID Identifiant unique d'une action, utilise pour l'acquittement (/api/done/{guid})
Polling Interrogation periodique du serveur par le firmware (toutes les ~2 secondes)
ACL (Anti-Corruption Layer) Role du backend Go : traduit les requetes modernes en format compatible firmware legacy
MergeActions Fonction du backend qui combine les actions concurrentes par OR bitwise
GenerateCompleteBlock Fonction qui genere le bloc complet 605-622 a partir d'une commande partielle
_de67f Marqueur de fin de reponse HTTP utilise par le firmware pour detecter la completude du paquet TCP
enumScenario Sous-enum definissant les 41 parametres d'un scenario (base 592 pour le Scenario1, dont le bloc complet 605-622)
vd_Init_Echange() Fonction d'initialisation de la table avec les valeurs par defaut au boot
vd_TableEchangeLireEnFlash() Restaure les indices sauvegardes depuis le secteur Flash 0x7E000
Fil pilote Signal PWM envoye aux radiateurs electriques pour le mode chauffage (4 zones)
BA (Boitier Auxiliaire) Carte esclave PIC16F946 pilotee via I2C, commande les relais et variateurs
BP (Boitier Principal) Carte maitre MCF52259, gere Ethernet, table d'echange, et communique avec les BA

References Sources

  • Definition des indices : client-essensys-legacy/H/TableEchange.h
  • Droits d'acces : client-essensys-legacy/H/TableEchangeDroits.h
  • Fonctions d'acces : client-essensys-legacy/C/TableEchangeAcces.c
  • Persistance Flash : client-essensys-legacy/C/TableEchangeFlash.c
  • Backend Go (bloc complet) : essensys-server-backend/internal/core/action_service.go
  • MCP (auto-expansion) : essensys-server-backend/cmd/mcp-server/main.go