// en mode standard 0 A RMS correspond a une valeur réél entre 0 et 0.499 A
// en mode standard 1 A RMS correspond a une valeur réél entre 0.500 et 1.499 A
// en mode historique 0A RMS correspond a une valeur entre 0.000 et 0.999 A
// en mode historique 1A RMS correspond a une valeur entre 1.000 et 1.999 A
// retourne le max de Watt soutirés possible selon les infos fournit
float PotentialMax_S(uint32_t SINSTS, float FP = 1.0f, bool hist = false) {
if (SINSTS == 0) return 0.0f; // pas de soutirage durant cette période
FP = constrain(FP, 0.0f, 1.0f); // écrete le facteur de puissance entre 0 et 1
return SINSTS * FP; // pas de surprise, Linky nous donne la puissance soutirée
}
// retourne le min de Watt soutirés possible selon les infos fournit
float PotentialMin_S(uint32_t SINSTS, float FP = 1.0f, bool hist = false) {
if (SINSTS == 0) return 0.0f; // pas de soutirage durant cette période
FP = constrain(FP, 0.0f, 1.0f); // écrete le facteur de puissance entre 0 et 1
return SINSTS * FP; // pas de surprise, Linky nous donne la puissance soutirée
}
// retourne le max de Watt injectés possible selon les infos fournit
float PotentialMax_I(uint32_t IRMS, uint32_t URMS = 235, uint32_t SINSTI = 0xFFFF, uint32_t SINSTS = 0, float FP = 1.0f, bool hist = false) {
if (SINSTS > 0) return 0.0f; // soutirage en cours, pas de puissance injectée
FP = constrain(FP, 0.0f, 1.0f); // écrete le facteur de puissance entre 0 et 1
if (SINSTI < 0xFFFF) return SINSTI * FP; // pas de surprise, Linky nous donne la puissance injectée
float IMax = hist ? IRMS + 1.0f : IRMS + 0.5f; // I reel maxi selon mode teleinfo et valeur IRMS
float PVA = URMS * IMax; // VoltAmpere
return PVA * FP; // la puissance maxi est basée sur le plus grand I possible et le facteur de puissance
}
// retourne le min de Watt injectés possible selon les infos fournit
float PotentialMin_I(uint32_t IRMS, uint32_t URMS = 235, uint32_t SINSTI = 0xFFFF, uint32_t SINSTS = 0, float FP = 1.0f, bool hist = false) {
if (SINSTS > 0) return 0.0f; // soutirage en cours, pas de puissance injectée
FP = constrain(FP, 0.0f, 1.0f); // écrete le facteur de puissance entre 0 et 1
if (SINSTI < 0xFFFF) return SINSTI * FP; // pas de surprise, Linky nous donne la puissance injectée
float IMin = hist ? IRMS : IRMS - 0.5f; // I reel mini selon mode teleinfo et valeur IRMS
float PVA = URMS * IMin; // VoltAmpere
return PVA * FP; // la puissance mini est basée sur le plus petit I possible et le facteur de puissance
}
float PotentialMinByIndex(uint32_t deltaWh, uint32_t deltaT, uint32_t dureeTrame) {
if (deltaT == 0) return 0.0f; // pas de durée pour la variation d'index (evite div par 0)
if (deltaWh == 0) return (1.0f * 3600.0f * 1000.0f) / (deltaT + dureeTrame); // l'index n'a pas évolué, potentiellement il évoluera de 1 au tour suivant, considerant le changement d'index a l'extreme moment
return (deltaWh * 3600.0f * 1000.0f) / deltaT;
}
float PotentialMaxByIndex(uint32_t deltaWh, uint32_t deltaT, uint32_t dureeTrame) {
if (deltaT == 0) return 0.0f; // pas de durée pour la variation d'index (evite div par 0)
if (deltaWh == 0) return (1.0f * 3600.0f * 1000.0f) / deltaT; // l'index n'a pas évolué, potentiellement il évoluera de 1 au tour suivant, considerant le changement d'index juste après la diffusion trame
return (deltaWh * 3600.0f * 1000.0f) / (deltaT - dureeTrame); // si l'index a évoluer immédiatement après la diffusion de la trame précédente
}
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void loop() {
delay(10); // this speeds up the simulation
}