#ifndef TIC_DEF #define TIC_DEF #include #define TIC // Définition des constantes pour les délimiteurs de trame TIC //CF document ENEDIS #define STX 0x02 // Début de la trame : 0x02 () #define ETX 0x03 // Fin de la trame : 0x03 () End Of Text #define EOT 0x04 // Fin de transmission #define LF 0x0A /// Code ASCII pour , début de groupe d'information #define CR 0x0D // Fin de groupe d'information #define HT 0x09 // Séparateur dans le groupe #define SP 0x20 // Séparateur dans le groupe #define NONUTILE "NONUTILE" // Indicateur pour les champs non utilisés // Constantes pour la taille des étiquettes et le nombre d'étiquettes #define MAX_CHAR_ETIQUETTE 9 //CF doc ENEDIS #define NB_ETIQUETTE 45 // Structure pour stocker les détails d'un groupe TIC struct GroupDetail { String name; // Nom de l'étiquette String value; // Valeur associée à l'étiquette String horodate; // Horodatage de la valeur }; // Structure pour les bits de statut du registre struct RegistreStatusBits { uint32_t contactsec : 1; //bit 0 - État du contact sec uint32_t organeCoupure : 3; //bit 1 / 3 - État de l'organe de coupure uint32_t cache : 1; //bit 4 - Cache uint32_t : 1; //bit 5 uint32_t surtension : 1; //bit 6 - Indicateur de surtension uint32_t depassementPuissance : 1; //bit 7 - Indicateur de dépassement de puissance uint32_t consoProd : 1; //bit 8 - Indicateur de consommation/production uint32_t senseActiveEnergy : 1; //bit 9 - Sens de l'énergie active uint32_t tarifIndexConso : 4; //bit 10/13 - Index tarifaire de consommation uint32_t tarifIndexProd : 2; //bit 14/15 - Index tarifaire de production uint32_t horlogeState : 1; //bit 16 - État de l'horloge uint32_t ticState : 1; //bit 17 - État du TIC uint32_t : 1; //bit 18 uint32_t comEuridis : 2; //bit 19/20 - Communication Euridis uint32_t cplState : 2; //bit 21/22 - État du CPL uint32_t cplSynchro : 1; //bit 23 - Synchronisation CPL uint32_t tempo : 2; //bit 24/25 - Couleur du jour Tempo uint32_t tempoNextDay : 2; //bit 26/27 - Couleur du jour Tempo suivant uint32_t preavisPM : 2; //bit 28/29 - Préavis pointe mobile uint32_t PM : 2; //bit 30/31 - Pointe mobile }; // Structure pour les bits de statut des relais struct RelaisStatusBits { uint8_t relaisSec : 1; //bit 1 - État du relais sec uint8_t relais1 : 1; //bit 2 - État du relais 1 uint8_t relais2 : 1; //bit 3 uint8_t relais3 : 1; //bit 4 uint8_t relais4 : 1; //bit 5 uint8_t relais5 : 1; //bit 6 uint8_t relais6 : 1; //bit 7 uint8_t relais7 : 1; //bit 8 - État du relais 7 }; // Structure pour les bits d'actions du calendrier struct ActionsCalendrierBits { uint8_t index : 4; // Index de l'action uint8_t relais1 : 1; //bit 4 - État du relais 1 uint8_t relais2 : 1; //bit 8----- uint8_t relais3 : 1; //bit 8----- uint8_t relais4 : 1; //bit 8----- uint8_t relais5 : 1; //bit 7----- uint8_t relais6 : 1; //bit 6----- uint8_t relais7 : 1; //bit 10 - État du relais 7 uint8_t : 3; //bit 11-13 uint16_t relaisSec : 2; ///État du relais sec }; // Union pour gérer les actions du calendrier union ActionCalendrier { uint16_t ui; ActionsCalendrierBits bits; }; // Structure pour une action programmée struct Action { char startTime[4]; // Heure de début de l'action ActionCalendrier action; // Action associée }; // Union pour gérer le statut des relais union RelaisStatus { uint8_t ui; RelaisStatusBits bits; }; // Union pour gérer le statut du registre union RegistreStatus { uint32_t uli; RegistreStatusBits bits; }; const static String SelectedEtiquette[NB_ETIQUETTE] = { "ADSC", // Adresse du compteur "DATE", // Date et heure courantes "NGTF", // Numéro de gestionnaire de réseau de transport "LTARF", // Libellé du tarif en cours "EAST", // Énergie active soutirée totale "EASF01", "EASF02", "EASF03", "EASF04", // Énergie active soutirée par période tarifaire "EASD01", "EASD02", "EASD03", "EASD04", // Énergie active soutirée par période tarifaire (distribuée) "EAIT", // Énergie active injectée totale "ERQ1", "ERQ2", "ERQ3", "ERQ4", // Énergie réactive par quadrant "IRMS1", "IRMS2", "IRMS3", // Courant efficace par phase "URMS1", "URMS2", "URMS3", // Tension efficace par phase "PCOUP", // Puissance de coupure "SINSTS", "SINSTS1", "SINSTS2", "SINSTS3", // Puissance apparente soutirée totale et par phase "SINSTI", // Puissance apparente injectée "STGE", // État du registre de statuts "DPM1", "FPM1", "DPM2", "FPM2", "DPM3", "FPM3", // Début et fin de pointe mobile "RELAIS", // État des relais "NTARF", // Nom du tarif en cours "NJOURF", "NJOURF+1", "PJOURF+1", // Couleur du jour et du lendemain "MSG1", "MSG2", // Messages d'information "PPOINTE" // Préavis de pointe mobile }; // Tableau pour stocker les valeurs des groupes TIC identifiés extern struct GroupDetail TicValues[NB_ETIQUETTE]; //records the values of the identified group // Constantes pour la définition des statuts const static String kContactStatus[2] = { "closed", "open" }; //relais et contacteurs const static String kCoupure[7] = { "closed", "open_overpower", "open_overvoltage", "open_shedding", "open_euridis", "open_overheat-with-overcurrent", "open_overheat-without-overcurrent" }; const static String kOverVoltage[2] = { "no_overvoltage", "overvoltage" }; const static String kOverPower[2] = { "no_overpower", "overpower" }; const static String kProducer[2] = { "consummer", "producer" }; const static String kActivePower[2] = { "positive", "negative" }; const static String kHour[2] = { "ok", "degraded" }; const static String kTicMode[2] = { "historique", "standard" }; const static String kEuridis[4] = { "deactivated", "activated_without_security", "!!!", "activated_with_security" }; const static String kCpl[4] = { "new_unlock", "new_lock", "!!!", "registered" }; const static String kCplSynchro[2] = { "not_synchro", "synchro" }; const static String kTempoColor[4] = { "no", "blue", "white", "red" }; const static String kPointeMobile[4] = { "no", "PM1", "PM2", "PM3" }; // Prototypes des fonctions pour lire les données TIC et les convertir en JSON void readTicPort(); String ticValuesAsJson(); String ticBasicValuesAsJson(); #endif